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.

Reply via email to