https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66422
--- Comment #8 from Jan Hubicka <hubicka at ucw dot cz> --- > > run_foo () > { > ... > <bb 10>: > _33 = myfoo_28->buf[3]; > if (_33 != 1) > goto <bb 13>; > else > goto <bb 11>; > > <bb 11>: > _34 = (int) _27; > if (_34 > 4) > goto <bb 12>; > else > goto <bb 13>; > > <bb 12>: > __builtin_unreachable (); > _35 = myfoo_28->buf[4]; > > <bb 13>: > # _36 = PHI <0(2), 1(3), 0(4), 1(5), 0(6), 1(7), 0(8), 1(9), 0(10), 1(11), > 0(12)> > if (_36 != 0) > goto <bb 15>; > else > goto <bb 14>; > > <bb 14>: > i_37 = 1; > > <bb 15>: > # _2 = PHI <0(13), -1(14)> > return _2; > > and the unreachable () remains in the CFG. > > Honza - it seems that remove_exits_and_undefined_stmts inserts these > unreachable calls but fails to split the BBs. > > I have a patch. Hmm, Indeed. I have expected cleanup_cfg to get rid of _35 = myfoo_28->buf[4];. I suppose this changed with your compile time work for GCC 5? Honza