http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48486
--- Comment #2 from Steven Bosscher <steven at gcc dot gnu.org> 2011-04-06 22:38:51 UTC --- find_many_sub_basic_blocks breaks its own STATE: Breakpoint 6, find_many_sub_basic_blocks (blocks=0x19b6ea0) at ../../trunk/gcc/cfgbuild.c:577 577 SET_STATE (bb, (gdb) p bb $24 = (basic_block) 0x7ffff70d1f08 (gdb) watch ((basic_block) 0x7ffff70d1f08)->aux Hardware watchpoint 9: ((struct basic_block_def *) 140737338220296)->aux (gdb) cont Continuing. Hardware watchpoint 9: ((struct basic_block_def *) 140737338220296)->aux Old value = (void *) 0x0 New value = (void *) 0x2 find_many_sub_basic_blocks (blocks=0x19b6ea0) at ../../trunk/gcc/cfgbuild.c:576 576 FOR_EACH_BB (bb) (gdb) cont Continuing. Hardware watchpoint 9: ((struct basic_block_def *) 140737338220296)->aux Old value = (void *) 0x2 New value = (void *) 0x22 mark_tablejump_edge (label=0x7ffff6fdb000) at ../../trunk/gcc/cfgbuild.c:391 391 } (gdb) l cfgbuild.c:577 572 find_many_sub_basic_blocks (sbitmap blocks) 573 { 574 basic_block bb, min, max; 575 576 FOR_EACH_BB (bb) 577 SET_STATE (bb, 578 TEST_BIT (blocks, bb->index) ? BLOCK_TO_SPLIT : BLOCK_ORIGINAL); 579 580 FOR_EACH_BB (bb) 581 if (STATE (bb) == BLOCK_TO_SPLIT) (gdb) l cfgbuild.c:391 386 /* See comment in make_label_edge. */ 387 if (INSN_UID (label) == 0) 388 return; 389 bb = BLOCK_FOR_INSN (label); 390 SET_STATE (bb, FULL_STATE (bb) | BLOCK_USED_BY_TABLEJUMP); 391 } 392 393 static void 394 purge_dead_tablejump_edges (basic_block bb, rtx table) 395 { (gdb) (gdb) cont Continuing. Breakpoint 7, find_many_sub_basic_blocks (blocks=0x19b6ea0) at ../../trunk/gcc/cfgbuild.c:581 581 if (STATE (bb) == BLOCK_TO_SPLIT) (gdb) p STATE(bb) $25 = 34 (gdb)