Yesterday, one of my collegues ran into an internal compiler error when playing with some template code. Although she ran into the ICE on Mac OS X with an Apple gcc 4.01 build, it was easy enough to reproduce it on a linux box with a GNU gcc build. I'm logging this against 4.2.1, but it seems every 4.x version segfaults; I tested with 4.02, 4.1-20060113 (yep, some old build laying around), 4.2.1 and even with the latest 4.3-20070713. I created a small test case (see attachment) and this is the output I get with 4.2.1: dannyb@linux:~/bugs/ice> ~/opt/gcc-4.2.1/bin/g++ -v -o test test.cpp Using built-in specs. Target: i686-pc-linux-gnu Configured with: ../gcc-4.2.1/configure --prefix=/home/dannyb/opt/gcc-4.2.1 --enable-languages=c,c++ Thread model: posix gcc version 4.2.1 /home/dannyb/opt/gcc-4.2.1/libexec/gcc/i686-pc-linux-gnu/4.2.1/cc1plus -quiet -v -D_GNU_SOURCE test.cpp -quiet -dumpbase test.cpp -mtune=generic -auxbase test -version -o /tmp/ccyPKN6k.s ignoring nonexistent directory "/home/dannyb/opt/gcc-4.2.1/lib/gcc/i686-pc-linux-gnu/4.2.1/../../../../i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /home/dannyb/opt/gcc-4.2.1/lib/gcc/i686-pc-linux-gnu/4.2.1/../../../../include/c++/4.2.1 /home/dannyb/opt/gcc-4.2.1/lib/gcc/i686-pc-linux-gnu/4.2.1/../../../../include/c++/4.2.1/i686-pc-linux-gnu /home/dannyb/opt/gcc-4.2.1/lib/gcc/i686-pc-linux-gnu/4.2.1/../../../../include/c++/4.2.1/backward /usr/local/include /home/dannyb/opt/gcc-4.2.1/include /home/dannyb/opt/gcc-4.2.1/lib/gcc/i686-pc-linux-gnu/4.2.1/include /usr/include End of search list. GNU C++ version 4.2.1 (i686-pc-linux-gnu) compiled by GNU C version 4.2.1. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: cfede80d80c2b8e19355e4026d77f0b9 test.cpp: In member function ‘void ScopeImpl<F>::Execute() [with F = void (*)(int)]’: test.cpp:31: instantiated from ‘static void ScopeImplBase::SafeExecute(J&) [with J = ScopeImpl<void (*)(int)>]’ test.cpp:50: instantiated from ‘ScopeImpl<F>::~ScopeImpl() [with F = void (*)(int)]’ test.cpp:46: instantiated from ‘static void ScopeImpl<F>::MakeGuard(F) [with F = void (*)(int)]’ test.cpp:68: instantiated from ‘void DoAtExit(F) [with F = void (*)(int)]’ test.cpp:74: instantiated from here test.cpp:54: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions.
Created attachment 13944 [details] Test case that triggers the ICE
Created attachment 13949 [details] Reduced testcase
2007-07-22 Nathan Sidwell <nathan@codesourcery.com> cp/ PR c++/32839 * typeck.c (convert_arguments): Only use default args if we have a function decl. testsuite/ PR c++/32839 * g++.dg/expr/call4.C: New. * g++.dg/expr/call5.C: New.
Subject: Bug 32839 Author: nathan Date: Sun Jul 22 18:46:51 2007 New Revision: 126829 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=126829 Log: cp/ PR c++/32839 * typeck.c (convert_arguments): Only use default args if we have a function decl. testsuite/ PR c++/32839 * g++.dg/expr/call4.C: New. * g++.dg/expr/call5.C: New. Added: trunk/gcc/testsuite/g++.dg/expr/call4.C trunk/gcc/testsuite/g++.dg/expr/call5.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/typeck.c trunk/gcc/testsuite/ChangeLog