https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101466
--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to cqwrteur from comment #6) > (In reply to Andrew Pinski from comment #4) > > Reduced testcase: > > extern void g() __attribute__((noreturn)); > > > > void square(int t, int *tt) > > { > > if (t == 0) g(); > > tt[0] = 0; > > if (t == 1) g(); > > tt[1] = 0; > > if (t == 2) g(); > > tt[2] = 0; > > if (t == 3) g(); > > tt[3] = 0; > > if (t == 4) g(); > > tt[4] = 0; > > } > > I think the reduced testcase should be > > extern void g() __attribute__((noreturn)); > > void square(unsigned t, int *tt) > { > if (t<=0) g(); > tt[0] = 0; > if (t<=1) g(); > tt[1] = 0; > if (t<=2) g(); > tt[2] = 0; > if (t<=3) g(); > tt[3] = 0; > if (t<=4) g(); > tt[4] = 0; > } Yes obvious t should be unsigned. But the <= will become == due to VRP figuring that out :). So it is either way.