http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57455
Bug ID: 57455 Summary: "internal compiler error: Floating point exception", in seemingly random places Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: major Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: theartlav at gmail dot com Created attachment 30216 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30216&action=edit Bug examples System is Intel Atom CPU (eeepc 901 laptop), 32 bit LFS Linux, 3.9.3 kernel. Tried GCC 4.8.0, compiled by itself, GCC 4.7.2 compiled with 4.8.0 and GCC 4.7.2 compiled by itself. During compilation of several different projects, including GCC itself, the compiler produces a "internal compiler error: Floating point exception" error. This error can often be worked around by reshuffling the statements in the C code being compiled (i.e. changing z=a/(b+c); to x=b+c; z=a/x;). I thought it was a GCC 4.8.0 bug at first, so i compiled GCC 4.7.2, and tried it, but am getting exactly the same errors. Included are reproduction examples from compiling gcc 4.7.2 with itself, and compiling Python 2.7.5 with gcc 4.7.2. With 4.7.2 the errors happen in exactly the same way as with 4.8.0, but i no longer have 4.8.0. If it's critical, i can build it again, and report from it. GCC configuration options: configure --prefix=/usr --libexecdir=/usr/lib --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-languages=c,c++ --disable-multilib --with-system-zlib Full output for cmathmodule.i (comes from Python 2.7.5): gcc -pthread -fPIC -fno-strict-aliasing -DNDEBUG -g -fwrapv -O0 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/include -I/usr/local/include -I/mnt/sdc1/bld/Python-2.7.5/Include -I/mnt/sdc1/bld/Python-2.7.5 -c /mnt/sdc1/bld/Python-2.7.5/Modules/cmathmodule.c -o build/temp.linux-i686-2.7/mnt/sdc1/bld/Python-2.7.5/Modules/cmathmodule.o -save-temps -v Using built-in specs. COLLECT_GCC=gcc Target: i686-pc-linux-gnu Configured with: ../gcc-4.7.2/configure --prefix=/usr --libexecdir=/usr/lib --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-languages=c,c++ --disable-multilib --with-system-zlib Thread model: posix gcc version 4.7.2 (GCC) COLLECT_GCC_OPTIONS='-pthread' '-fPIC' '-fno-strict-aliasing' '-D' 'NDEBUG' '-g' '-fwrapv' '-O0' '-Wall' '-Wstrict-prototypes' '-I' '.' '-I' 'Include' '-I' './Include' '-I' '/usr/include' '-I' '/usr/local/include' '-I' '/mnt/sdc1/bld/Python-2.7.5/Include' '-I' '/mnt/sdc1/bld/Python-2.7.5' '-c' '-o' 'build/temp.linux-i686-2.7/mnt/sdc1/bld/Python-2.7.5/Modules/cmathmodule.o' '-save-temps' '-v' '-mtune=generic' '-march=pentiumpro' /usr/lib/gcc/i686-pc-linux-gnu/4.7.2/cc1 -E -quiet -v -I . -I Include -I ./Include -I /usr/include -I /usr/local/include -I /mnt/sdc1/bld/Python-2.7.5/Include -I /mnt/sdc1/bld/Python-2.7.5 -D_REENTRANT -D NDEBUG /mnt/sdc1/bld/Python-2.7.5/Modules/cmathmodule.c -mtune=generic -march=pentiumpro -Wall -Wstrict-prototypes -fPIC -fno-strict-aliasing -fwrapv -g -fworking-directory -O0 -fpch-preprocess -o cmathmodule.i ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../i686-pc-linux-gnu/include" ignoring duplicate directory "./Include" ignoring duplicate directory "/usr/include" as it is a non-system directory that duplicates a system directory ignoring duplicate directory "/usr/local/include" as it is a non-system directory that duplicates a system directory ignoring duplicate directory "/mnt/sdc1/bld/Python-2.7.5/Include" ignoring duplicate directory "/mnt/sdc1/bld/Python-2.7.5" #include "..." search starts here: #include <...> search starts here: . Include /usr/lib/gcc/i686-pc-linux-gnu/4.7.2/include /usr/local/include /usr/lib/gcc/i686-pc-linux-gnu/4.7.2/include-fixed /usr/include End of search list. COLLECT_GCC_OPTIONS='-pthread' '-fPIC' '-fno-strict-aliasing' '-D' 'NDEBUG' '-g' '-fwrapv' '-O0' '-Wall' '-Wstrict-prototypes' '-I' '.' '-I' 'Include' '-I' './Include' '-I' '/usr/include' '-I' '/usr/local/include' '-I' '/mnt/sdc1/bld/Python-2.7.5/Include' '-I' '/mnt/sdc1/bld/Python-2.7.5' '-c' '-o' 'build/temp.linux-i686-2.7/mnt/sdc1/bld/Python-2.7.5/Modules/cmathmodule.o' '-save-temps' '-v' '-mtune=generic' '-march=pentiumpro' /usr/lib/gcc/i686-pc-linux-gnu/4.7.2/cc1 -fpreprocessed cmathmodule.i -quiet -dumpbase cmathmodule.c -mtune=generic -march=pentiumpro -auxbase-strip build/temp.linux-i686-2.7/mnt/sdc1/bld/Python-2.7.5/Modules/cmathmodule.o -g -O0 -Wall -Wstrict-prototypes -version -fPIC -fno-strict-aliasing -fwrapv -o cmathmodule.s GNU C (GCC) version 4.7.2 (i686-pc-linux-gnu) compiled by GNU C version 4.7.2, GMP version 5.1.1, MPFR version 3.1.2, MPC version 1.0.1 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C (GCC) version 4.7.2 (i686-pc-linux-gnu) compiled by GNU C version 4.7.2, GMP version 5.1.1, MPFR version 3.1.2, MPC version 1.0.1 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 7767214877209b126d7f07deb1942e48 /mnt/sdc1/bld/Python-2.7.5/Modules/cmathmodule.c: In function 'c_cosh': /mnt/sdc1/bld/Python-2.7.5/Modules/cmathmodule.c:414:5: internal compiler error: Floating point exception Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. With the cmathmodule.i file, the bug is reproduced instantly and repeatedly by calling "gcc cmathmodule.i". Second case, building gcc 4.7.2 with the options provided above, with either 4.7.2 or 4.8.0 (note, it's xgcc, which AFAIK is the bootstrap): The stdc++.ii file. in gcc-build/i686-pc-linux-gnu/libstdc++-v3/include: /bld/gcc-build/./gcc/xgcc -shared-libgcc -B/bld/gcc-build/./gcc -nostdinc++ -L/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/src -L/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/src/.libs -B/usr/i686-pc-linux-gnu/bin/ -B/usr/i686-pc-linux-gnu/lib/ -isystem /usr/i686-pc-linux-gnu/include -isystem /usr/i686-pc-linux-gnu/sys-include -x c++-header -nostdinc++ -g -O2 -D_GNU_SOURCE -I/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include/i686-pc-linux-gnu -I/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include -I/bld/gcc-4.7.2/libstdc++-v3/libsupc++ -O2 -g -std=gnu++0x /bld/gcc-4.7.2/libstdc++-v3/include/precompiled/stdc++.h -o i686-pc-linux-gnu/bits/stdc++.h.gch/O2ggnu++0x.gch -v -save-temps Reading specs from /bld/gcc-build/./gcc/specs COLLECT_GCC=/bld/gcc-build/./gcc/xgcc COLLECT_LTO_WRAPPER=/bld/gcc-build/./gcc/lto-wrapper Target: i686-pc-linux-gnu Configured with: ../gcc-4.7.2/configure --prefix=/usr --libexecdir=/usr/lib --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-languages=c,c++ --disable-multilib --with-system-zlib Thread model: posix gcc version 4.7.2 (GCC) COLLECT_GCC_OPTIONS='-shared-libgcc' '-B' '/bld/gcc-build/./gcc' '-nostdinc++' '-L/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/src' '-L/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/src/.libs' '-B' '/usr/i686-pc-linux-gnu/bin/' '-B' '/usr/i686-pc-linux-gnu/lib/' '-isystem' '/usr/i686-pc-linux-gnu/include' '-isystem' '/usr/i686-pc-linux-gnu/sys-include' '-nostdinc++' '-g' '-O2' '-D' '_GNU_SOURCE' '-I' '/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include/i686-pc-linux-gnu' '-I' '/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include' '-I' '/bld/gcc-4.7.2/libstdc++-v3/libsupc++' '-O2' '-g' '-std=gnu++11' '-o' 'i686-pc-linux-gnu/bits/stdc++.h.gch/O2ggnu++0x.gch' '-v' '-save-temps' '-mtune=generic' '-march=pentiumpro' /bld/gcc-build/./gcc/cc1plus -E -quiet -nostdinc++ -nostdinc++ -v -I /bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include/i686-pc-linux-gnu -I /bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include -I /bld/gcc-4.7.2/libstdc++-v3/libsupc++ -iprefix /mnt/sdc1/bld/gcc-build/gcc/../lib/gcc/i686-pc-linux-gnu/4.7.2/ -isystem /bld/gcc-build/./gcc/include -isystem /bld/gcc-build/./gcc/include-fixed -D_GNU_SOURCE -D _GNU_SOURCE -isystem /usr/i686-pc-linux-gnu/include -isystem /usr/i686-pc-linux-gnu/sys-include /bld/gcc-4.7.2/libstdc++-v3/include/precompiled/stdc++.h -mtune=generic -march=pentiumpro -std=gnu++11 -g -g -fworking-directory -O2 -O2 -fpch-preprocess -o stdc++.ii ignoring nonexistent directory "/usr/i686-pc-linux-gnu/include" ignoring nonexistent directory "/usr/i686-pc-linux-gnu/sys-include" ignoring nonexistent directory "/mnt/sdc1/bld/gcc-build/gcc/../lib/gcc/i686-pc-linux-gnu/4.7.2/include" ignoring nonexistent directory "/mnt/sdc1/bld/gcc-build/gcc/../lib/gcc/i686-pc-linux-gnu/4.7.2/include-fixed" ignoring nonexistent directory "/mnt/sdc1/bld/gcc-build/gcc/../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../i686-pc-linux-gnu/include" ignoring nonexistent directory "/mnt/sdc1/bld/gcc-build/gcc/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.7.2/include" ignoring nonexistent directory "/mnt/sdc1/bld/gcc-build/gcc/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.7.2/include-fixed" ignoring nonexistent directory "/mnt/sdc1/bld/gcc-build/gcc/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include/i686-pc-linux-gnu /bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include /bld/gcc-4.7.2/libstdc++-v3/libsupc++ /bld/gcc-build/./gcc/include /bld/gcc-build/./gcc/include-fixed /usr/local/include /usr/include End of search list. COLLECT_GCC_OPTIONS='-shared-libgcc' '-B' '/bld/gcc-build/./gcc' '-nostdinc++' '-L/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/src' '-L/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/src/.libs' '-B' '/usr/i686-pc-linux-gnu/bin/' '-B' '/usr/i686-pc-linux-gnu/lib/' '-isystem' '/usr/i686-pc-linux-gnu/include' '-isystem' '/usr/i686-pc-linux-gnu/sys-include' '-nostdinc++' '-g' '-O2' '-D' '_GNU_SOURCE' '-I' '/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include/i686-pc-linux-gnu' '-I' '/bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include' '-I' '/bld/gcc-4.7.2/libstdc++-v3/libsupc++' '-O2' '-g' '-std=gnu++11' '-o' 'i686-pc-linux-gnu/bits/stdc++.h.gch/O2ggnu++0x.gch' '-v' '-save-temps' '-mtune=generic' '-march=pentiumpro' /bld/gcc-build/./gcc/cc1plus -fpreprocessed stdc++.ii -quiet -dumpbase stdc++.h -mtune=generic -march=pentiumpro -auxbase stdc++ -g -g -O2 -O2 -std=gnu++11 -version -o stdc++.s --output-pch= i686-pc-linux-gnu/bits/stdc++.h.gch/O2ggnu++0x.gch GNU C++ (GCC) version 4.7.2 (i686-pc-linux-gnu) compiled by GNU C version 4.7.2, GMP version 5.1.1, MPFR version 3.1.2, MPC version 1.0.1 GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 GNU C++ (GCC) version 4.7.2 (i686-pc-linux-gnu) compiled by GNU C version 4.7.2, GMP version 5.1.1, MPFR version 3.1.2, MPC version 1.0.1 GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 Compiler executable checksum: 2ea1b12687853b332af35829e292d98a In file included from /bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include/random:51:0, from /bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include/bits/stl_algo.h:67, from /bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include/algorithm:63, from /bld/gcc-4.7.2/libstdc++-v3/include/precompiled/stdc++.h:65: /bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include/bits/random.tcc: In function '_RealType std::generate_canonical(_UniformRandomNumberGenerator&)': /bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include/bits/random.tcc:2843:59: in constexpr expansion of 'std::log(2.0e+0l)' /bld/gcc-build/i686-pc-linux-gnu/libstdc++-v3/include/bits/random.tcc:2843:59: internal compiler error: Floating point exception Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. If you change the lines in question in libstdc++-v3/include/bits/random.tcc to: size_t y=std::log(2.0L); const size_t __log2r = std::log(__r) / y; size_t __x=__b + __log2r - 1UL; size_t __k = std::max<size_t>(1UL, __x / __log2r); Then the bug don't happen.