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

Reply via email to