------- Comment #7 from steven at gcc dot gnu dot org 2005-12-18 16:04 ------- comment #6 says "invalid code". So is this an ICE on valid, or _invalid_ code?
Anyway, Starting program: /abuild/stevenb/build/gcc/cc1plus t.C A<T>::A() Breakpoint 4, expand_member_init (name=0x401c9958) at init.c:950 950 if (!current_class_ref) (gdb) cont Continuing. A<T>::A() [with T = int*] Breakpoint 4, expand_member_init (name=0x40153c38) at init.c:950 950 if (!current_class_ref) (gdb) next 953 if (!name) (gdb) p debug_generic_expr(name) intD.2 * $9 = void (gdb) next 973 else if (TYPE_P (name)) (gdb) 975 basetype = TYPE_MAIN_VARIANT (name); (gdb) 976 name = TYPE_NAME (name); (gdb) 983 if (basetype) (gdb) p debug_generic_expr(name) $10 = void (gdb) p debug_generic_expr(basetype) intD.2 * $11 = void (gdb) So we have nullified name. Then we go on to the error message without a name: (gdb) b init.c:1025 Breakpoint 5 at 0x815c5fb: file init.c, line 1025. (gdb) cont Continuing. Breakpoint 5, expand_member_init (name=0x0) at init.c:1025 1025 error ("type %qD is not a direct base of %qT", (gdb) l 1020 { 1021 if (CLASSTYPE_VBASECLASSES (current_class_type)) 1022 error ("type %qD is not a direct or virtual base of %qT", 1023 name, current_class_type); 1024 else 1025 error ("type %qD is not a direct base of %qT", 1026 name, current_class_type); 1027 return NULL_TREE; 1028 } 1029 (gdb) p name $12 = 0x0 (gdb) Obviously we ICE when we try to print the NULL name. -- steven at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|ice-on-valid-code |ice-on-invalid-code http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24278