https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71335
Jan Hubicka <hubicka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |law at redhat dot com --- Comment #2 from Jan Hubicka <hubicka at gcc dot gnu.org> --- The return goes away in thread1 pass. Before: main () { int b; int a.0_1; <bb 2>: <bb 3>: # b_3 = PHI <0(2), 9(4), 9(3)> a.0_1 = a; if (a.0_1 < 0) goto <bb 3>; else goto <bb 4>; <bb 4>: if (b_3 != 0) goto <bb 3>; else goto <bb 5>; <bb 5>: return 0; } after: main () { int b; int a.0_1; int a.0_8; <bb 2>: <bb 3>: # b_3 = PHI <0(2), 9(4), 9(3)> a.0_1 = a; if (a.0_1 < 0) goto <bb 3>; else goto <bb 4>; <bb 4>: # b_4 = PHI <9(3)> a.0_8 = a; goto <bb 3>; } The first code still is finite: a is 0 and thus it should execute BB2->BB3 (b_3=0,a.0_1=0)->BB4->BB5. Jeff, any idea?