https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66590
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- This is what we have now: ;; Function f (_Z1fi, funcdef_no=0, decl_uid=2362, cgraph_uid=1, symbol_order=0) Removing basic block 6 Removing basic block 8 Merging blocks 3 and 4 Removing basic block 11 Merging blocks 12 and 14 Merging blocks 3 and 5 ;; 1 loops found ;; ;; Loop 0 ;; header 0, latch 1 ;; depth 0, outer -1 ;; nodes: 0 1 2 3 4 5 6 7 8 9 ;; 2 succs { 4 3 } ;; 3 succs { 5 } ;; 4 succs { 5 } ;; 5 succs { 8 6 } ;; 6 succs { 7 } ;; 7 succs { 1 } ;; 8 succs { 9 } ;; 9 succs { 1 } int f (int x) { int finally_tmp.0; struct A tmp; struct A a; int D.2384; <bb 2> : if (x == 1) goto <bb 3>; [INV] else goto <bb 4>; [INV] <bb 3> : <L0>: D.2384 = 1; A::~A (&tmp); tmp = {CLOBBER}; finally_tmp.0 = 0; goto <bb 5>; [INV] <bb 4> : <L3>: D.2384 = 0; finally_tmp.0 = 0; <bb 5> : A::~A (&a); if (finally_tmp.0 == 1) goto <bb 6>; [INV] else goto <bb 8>; [INV] <bb 6> : <L6>: <bb 7> : a = {CLOBBER}; return; <bb 8> : a = {CLOBBER}; <bb 9> : <L11>: return D.2384; } Looks like there was a case where we thought finally_tmp.0 could be equal to 1. Note this is all internal.