The crash is during compilation. I run a Debian with the Linux kernel 2.6.14 The error is (with the recommended command line):
****************** BEGINNING OF GCC OUTPUT ********************************** $ gcc -v -save-temps -o ti_bug ti_bug.cc Err 1 Using built-in specs. Target: i486-linux-gnu Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --with-tune=i686 --enable-checking=release i486-linux-gnu Thread model: posix gcc version 4.0.4 20060422 (prerelease) (Debian 4.0.3-2) /usr/lib/gcc/i486-linux-gnu/4.0.4/cc1plus -E -quiet -v -D_GNU_SOURCE ti_bug.cc -mtune=i686 -fpch-preprocess -o ti_bug.ii ignoring nonexistent directory "/usr/local/include/i486-linux-gnu" ignoring nonexistent directory "/usr/include/i486-linux-gnu" #include "..." search starts here: #include <...> search starts here: /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4 /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/i486-linux-gnu /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/backward /usr/local/include /usr/lib/gcc/i486-linux-gnu/4.0.4/include /usr/include End of search list. /usr/lib/gcc/i486-linux-gnu/4.0.4/cc1plus -fpreprocessed ti_bug.ii -quiet -dumpbase ti_bug.cc -mtune=i686 -auxbase ti_bug -version -o ti_bug.s GNU C++ version 4.0.4 20060422 (prerelease) (Debian 4.0.3-2) (i486-linux-gnu) compiled by GNU C version 4.0.4 20060422 (prerelease) (Debian 4.0.3-2). GGC heuristics: --param ggc-min-expand=90 --param ggc-min-heapsize=113348 ti_bug.cc: In function 'int main()': ti_bug.cc:10: internal compiler error: in create_tmp_var, at gimplify.c:368 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.0/README.Bugs>. ****************** END OF GCC OUTPUT ********************************** And here is the preprocessed file that cause the bug (there is nothing afterward) : # 1 "ti_bug.cc" # 1 "<built-in>" # 1 "<command line>" # 1 "ti_bug.cc" # 1 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/typeinfo" 1 3 # 38 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/typeinfo" 3 # 1 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/exception" 1 3 # 40 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/exception" 3 #pragma GCC visibility push(default) extern "C++" { namespace std { # 54 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/exception" 3 class exception { public: exception() throw() { } virtual ~exception() throw(); virtual const char* what() const throw(); }; class bad_exception : public exception { public: bad_exception() throw() { } virtual ~bad_exception() throw(); }; typedef void (*terminate_handler) (); typedef void (*unexpected_handler) (); terminate_handler set_terminate(terminate_handler) throw(); void terminate() __attribute__ ((__noreturn__)); unexpected_handler set_unexpected(unexpected_handler) throw(); void unexpected() __attribute__ ((__noreturn__)); # 102 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/exception" 3 bool uncaught_exception() throw(); } namespace __gnu_cxx { # 117 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/exception" 3 void __verbose_terminate_handler (); } } #pragma GCC visibility pop # 39 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/typeinfo" 2 3 #pragma GCC visibility push(default) extern "C++" { namespace __cxxabiv1 { class __class_type_info; } # 59 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/typeinfo" 3 namespace std { class type_info { public: virtual ~type_info(); private: type_info& operator=(const type_info&); type_info(const type_info&); protected: const char *__name; protected: explicit type_info(const char *__n): __name(__n) { } public: const char* name() const { return __name; } # 105 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/typeinfo" 3 bool before(const type_info& __arg) const { return __name < __arg.__name; } bool operator==(const type_info& __arg) const { return __name == __arg.__name; } bool operator!=(const type_info& __arg) const { return !operator==(__arg); } public: virtual bool __is_pointer_p() const; virtual bool __is_function_p() const; virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj, unsigned __outer) const; virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target, void **__obj_ptr) const; }; class bad_cast : public exception { public: bad_cast() throw() { } virtual ~bad_cast() throw(); }; class bad_typeid : public exception { public: bad_typeid () throw() { } virtual ~bad_typeid() throw(); }; } #pragma GCC visibility pop } # 2 "ti_bug.cc" 2 struct A { virtual ~A() {} }; int main() { typeid( typeid( *new A() ) ); return 0; } -- Summary: Compiler crash with typeid(typeid(*a)) Product: gcc Version: 4.0.4 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: p dot barbierdereuille at free dot fr http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27591