http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55862
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> 2013-01-04 11:59:42 UTC --- For BB 7 we iterate between (gdb) call debug_bitmap_set (old) debug[0] := { {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018), {plus_expr,g.0_18,1} (0031), {plus_expr,g.4_37,1} (0046), {mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049), {pointer_plus_expr,pretmp_45,4} (0050) } (gdb) call debug_bitmap_set (((bb_value_sets_t) ((block)->aux))->antic_in) debug[0] := { p_25 (0024), {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018), {plus_expr,g.0_18,1} (0031), {plus_expr,g.4_37,1} (0046), {mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049), {pointer_plus_expr,pretmp_45,4} (0050) } (gdb) call debug_bitmap_set (old) debug[0] := { p_25 (0024), {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018), {plus_expr,g.0_18,1} (0031), {plus_expr,g.4_37,1} (0046), {mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049), {pointer_plus_expr,pretmp_45,4} (0050) } (gdb) call debug_bitmap_set (((bb_value_sets_t) ((block)->aux))->antic_in) debug[0] := { {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018), {plus_expr,g.0_18,1} (0031), {plus_expr,g.4_37,1} (0046), {mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049), {pointer_plus_expr,pretmp_45,4} (0050) } (gdb) call debug_bitmap_set (old) debug[0] := { {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018), {plus_expr,g.0_18,1} (0031), {plus_expr,g.4_37,1} (0046), {mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049), {pointer_plus_expr,pretmp_45,4} (0050) } (gdb) call debug_bitmap_set (((bb_value_sets_t) ((block)->aux))->antic_in) debug[0] := { p_25 (0024), {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018), {plus_expr,g.0_18,1} (0031), {plus_expr,g.4_37,1} (0046), {mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049), {pointer_plus_expr,pretmp_45,4} (0050) } The CFG is quite complicated ... easier to read testcase: int g, a, *b; void f(void) { int *p; if(g) { int **k = &p; for(; g; p++) for(a = 0; a < 1; a++) { int *c = p; label2: if(a < 1) *c = 0; } goto label1; while(g++) for(*b = 0; *b; b++) label1: ; } goto label2; } I have a patch.