On Thu, 25 Oct 2012, Steven Bosscher wrote: > On Thu, Oct 25, 2012 at 12:31 PM, Richard Biener <rguent...@suse.de> wrote: > >> But, really, why inline noreturn functions at all? > > > > That's a good question. The question then is, why not? > > Because noreturn functions are usually on error paths. To inline a > called noreturn function is to drag overhead into the caller, > potentially resulting in poorer icache behavior, increased code size, > ... > > But I suppose inlining things like wrappers around exit() and abort() > should be a win. Maybe a noreturn function should get a size/time > penalty to avoid inlining relatively large noreturn functions.
In this case the function is empty ;) Btw, even without inlining it in the LTO case we may discover it is after all not noreturn and thus face the same situation - a non-noreturn call ending a basic block with no successor edges. > > And the question still stands: is a BB without successor ok? > > Yes, this is OK. So the bug here is really in find_many_sub_basic_blocks then and your patch would certainly avoid triggering its bug (or its wrong expectations). I'll give it testing. Richard.