------- Comment #3 from danglin at gcc dot gnu dot org 2007-05-20 17:38 ------- My last comment about this being a GC problem was wrong. Here's a backtrace from a compiler containing debug symbols:
(gdb) bt #0 0x4000000000c5a274 in get_cse_reg_info (regno=66) at ../../gcc/gcc/cse.c:847 #1 0x4000000000c5d31c in invalidate (x=0x800003fffec89d00, full_mode=VOIDmode) at ../../gcc/gcc/cse.c:1727 #2 0x4000000000c5cf18 in flush_hash_table () at ../../gcc/gcc/cse.c:1661 #3 0x4000000000c69d28 in cse_insn (insn=0x800003fffeda8f00, libcall_insn=0x0) at ../../gcc/gcc/cse.c:5341 #4 0x4000000000c6d480 in cse_extended_basic_block ( ebb_data=0x800003fffeff12e0) at ../../gcc/gcc/cse.c:6104 #5 0x4000000000c6df74 in cse_main (f=0x800003fffec93ec0, nregs=74) at ../../gcc/gcc/cse.c:6296 #6 0x4000000000c706f0 in rest_of_handle_cse () at ../../gcc/gcc/cse.c:7032 #7 0x400000000064a7e0 in execute_one_pass (pass=0x8000000100004d70) at ../../gcc/gcc/passes.c:1065 #8 0x400000000064aaa8 in execute_pass_list (pass=0x8000000100004d70) at ../../gcc/gcc/passes.c:1117 #9 0x400000000064aae8 in execute_pass_list (pass=0x8000000100002610) at ../../gcc/gcc/passes.c:1118 #10 0x4000000000852070 in tree_rest_of_compilation (fndecl=0x800003fffec79300) at ../../gcc/gcc/tree-optimize.c:406 #11 0x400000000021f844 in c_expand_body (fndecl=0x42fec89d00) at ../../gcc/gcc/c-common.c:4345 #12 0x4000000000b3d09c in cgraph_expand_function (node=0x800003fffec79400) ---Type <return> to continue, or q <return> to quit---q at .Quit (gdb) p debug_rtx (0x800003fffec89d00) (reg:DI 66 [ D.1605 ]) (gdb) frame 2 #2 0x4000000000c5cf18 in flush_hash_table () at ../../gcc/gcc/cse.c:1661 1661 invalidate (p->exp, VOIDmode); (gdb) p i $3 = 3 (gdb) p p $4 = (struct table_elt *) 0x8000000100102d88 (gdb) p table[3] $5 = (struct table_elt *) 0x8000000100102d88 static void flush_hash_table (void) { int i; struct table_elt *p; for (i = 0; i < HASH_SIZE; i++) for (p = table[i]; p; p = table[i]) { /* Note that invalidate can remove elements after P in the current hash chain. */ if (REG_P (p->exp)) invalidate (p->exp, VOIDmode); else remove_from_table (p, i); } } So, it looks like we are stuck in flush_hash_table. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31944