On Wed, Sep 6, 2017 at 7:03 PM, Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> wrote: > > What was written here above is that, *during linearization*, > when you have a branch from a structured-programming statement, > you know what are all the possible parents of the current block. > For branches coming from goto, it's not the case. Even this is not the case. Not for a C compiler, it isn't. Sure, if you do compilers for toy languages, it might be, but a C compiler has things like "switch()" statements that may not nest with loops etc. So even without a goto, you can pretty much have arbitrary flow. So I think people should entirely stop thinking that "goto" is somehow special. It isn't. It is only special in toy languages like Pascal, not in the real world. It's much better to get rid of that "goto is special" mindset, and instead say "all control flow is just a goto in the end". So yes, get rid of the *real* special cases - those structured flow constructs. They are nice special cases, but they are nice for *humans*, they aren't actually relevant to computers, and they shouldn't be. So the real special case is those simple "structured" loops. You should never design around them, because it will just hurt later. Turn those "structures loop" constructs into goto's as quickly as you can, and just forget about the structure that they really never enforced anyway. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html