When compiling incorrect code I got internal error. The error in the code is the attempt to use non constant expression as template argument. Tried compiling the same code with different versions.
The output of $ g++ -v -save-temps delegate.cpp 2> delegate.2.log Using built-in specs. Target: i486-linux-gnu Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu Thread model: posix gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7) /usr/lib/gcc/i486-linux-gnu/4.2.3/cc1plus -E -quiet -v -D_GNU_SOURCE delegate.cpp -mtune=generic -fpch-preprocess -o delegate.ii ignoring nonexistent directory "/usr/local/include/i486-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../i486-linux-gnu/include" ignoring nonexistent directory "/usr/include/i486-linux-gnu" #include "..." search starts here: #include <...> search starts here: /usr/include/c++/4.2 /usr/include/c++/4.2/i486-linux-gnu /usr/include/c++/4.2/backward /usr/local/include /usr/lib/gcc/i486-linux-gnu/4.2.3/include /usr/include End of search list. /usr/lib/gcc/i486-linux-gnu/4.2.3/cc1plus -fpreprocessed delegate.ii -quiet -dumpbase delegate.cpp -mtune=generic -auxbase delegate -version -fstack-protector -fstack-protector -o delegate.s GNU C++ version 4.2.3 (Ubuntu 4.2.3-2ubuntu7) (i486-linux-gnu) compiled by GNU C version 4.2.3 (Ubuntu 4.2.3-2ubuntu7). GGC heuristics: --param ggc-min-expand=99 --param ggc-min-heapsize=129239 Compiler executable checksum: 9cf91ba46d80e564052e4fbab0d6561b delegate.cpp: In function âvoid delegate(void*) [with T = A, void (T::* fnc)() = fnc]â: delegate.cpp:49: internal compiler error: in expand_expr_real_1, at expr.c:6953 Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. For Debian GNU/Linux specific bug reporting instructions, see <URL:file:///usr/share/doc/gcc-4.2/README.Bugs>. 3.3.6 version correctly ends with detecting error: Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/specs Configured with: /var/tmp/portage/sys-devel/gcc-3.3.6-r1/work/gcc-3.3.6/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/3.3.6 --includedir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3.6 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3.6/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3.6/info --with-gxx-include-dir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/include/g++-v3 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-libunwind-exceptions --disable-multilib --enable-java-awt=gtk --enable-objc-gc --enable-languages=c,c++,java,objc,f77 --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu Thread model: posix gcc version 3.3.6 (Gentoo 3.3.6-r1, ssp-3.3.6-1.0, pie-8.7.8) /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/cc1plus -E -D__GNUG__=3 -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=6 -D_GNU_SOURCE delegate.cpp delegate.ii ignoring nonexistent directory "/usr/local/include" ignoring nonexistent directory "/usr/i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/include/libffi /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/include/g++-v3 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/include/g++-v3/i686-pc-linux-gnu /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/include/g++-v3/backward /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/include /usr/include End of search list. /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/cc1plus -fpreprocessed delegate.ii -quiet -dumpbase delegate.cpp -auxbase delegate -version -o delegate.s GNU C++ version 3.3.6 (Gentoo 3.3.6-r1, ssp-3.3.6-1.0, pie-8.7.8) (i686-pc-linux-gnu) compiled by GNU C version 3.3.6 (Gentoo 3.3.6-r1, ssp-3.3.6-1.0, pie-8.7.8). GGC heuristics: --param ggc-min-expand=57 --param ggc-min-heapsize=51200 delegate.cpp: In function `void (* make_delegate(void (T::*)()))(void*) [with T = A]': delegate.cpp:66: instantiated from here delegate.cpp:55: error: `fnc' is not a valid template argument delegate.cpp:55: error: it must be a pointer-to-member of the form `&X::Y' delegate.cpp:55: error: `fnc' is not a valid template argument delegate.cpp:55: error: it must be a pointer-to-member of the form `&X::Y' delegate.cpp:55: error: no matches converting function `delegate' to type `void (*)(void*)' delegate.cpp:48: error: candidates are: template<class T, void (T::*fnc)()> void delegate(void*) But version 4.1.2 doesn't detect error at all and compiles the program without error. The resulting code ends with segfault. Using built-in specs. Target: i686-pc-linux-gnu Configured with: /var/tmp/portage/sys-devel/gcc-4.1.2/work/gcc-4.1.2/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.1.2 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-libunwind-exceptions --disable-multilib --enable-libmudflap --disable-libssp --enable-java-awt=gtk --enable-objc-gc --enable-languages=c,c++,java,objc,obj-c++,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu Thread model: posix gcc version 4.1.2 (Gentoo 4.1.2) /usr/libexec/gcc/i686-pc-linux-gnu/4.1.2/cc1plus -E -quiet -v -D_GNU_SOURCE delegate.cpp -mtune=pentiumpro -fpch-preprocess -o delegate.ii ignoring nonexistent directory "/usr/local/include" ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/include/libffi /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4 /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4/i686-pc-linux-gnu /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4/backward /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include /usr/include End of search list. /usr/libexec/gcc/i686-pc-linux-gnu/4.1.2/cc1plus -fpreprocessed delegate.ii -quiet -dumpbase delegate.cpp -mtune=pentiumpro -auxbase delegate -version -o delegate.s GNU C++ version 4.1.2 (Gentoo 4.1.2) (i686-pc-linux-gnu) compiled by GNU C version 4.1.2 (Gentoo 4.1.2). GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 7d6b56528cd4ae17b53be09f49b00cbc /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../i686-pc-linux-gnu/bin/as -V -Qy -o delegate.o delegate.s GNU assembler version 2.18 (i686-pc-linux-gnu) using BFD version (GNU Binutils) 2.18 /usr/libexec/gcc/i686-pc-linux-gnu/4.1.2/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crti.o /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/crtbegin.o -L/usr/lib/gcc/i686-pc-linux-gnu/4.1.2 -L/usr/lib/gcc/i686-pc-linux-gnu/4.1.2 -L/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../i686-pc-linux-gnu/lib -L/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../.. delegate.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/crtend.o /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crtn.o -- Summary: internal compiler error: in expand_expr_real_1, at expr.c:6953 Product: gcc Version: 4.2.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: korusef at gmail dot com GCC build triplet: i486-linux-gnu GCC host triplet: i486-linux-gnu GCC target triplet: i486-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36789