On Wed, Sep 06, 2017 at 07:15:13PM -0700, Linus Torvalds wrote: > 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. Yes, sure. But what I wrote still hold because, even for such cases, the linearization create trivial and useless BBs and for each of those you know where the possible parents are and when their linearization is finished while doing the linearization of each strutured construct of the AST. For gotos & computed gotos, it's not the case. It doesn't matter in itself, but it matters for the Simple SSA method because the processing of BBs for which you don't know yet all the parents must be delayed (it's the price you have to pay for being able to do things mostly on the fly). This delaying happens everywhere you have some kind of back-edge but knowing when all parents are done means that you also know when you can 'un-delay' things (the article call this 'unseal') and it's advantageous do do that as soon as possible. So for this Simple SSA method, gotos are kinda annoying and computed gotos even more so. Anyway, I've put this method on hold for the moment, focusing on the conversion of non-local variables (which Simple SSA can't do) and several related issues. > 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. Totally agree and it's what's done (I suppose by you and Chris, years ago) and will stay as such: directly after linearization you just have BBs with the list of parents & children. -- Luc Van Oostenryck -- 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