On Thu, Mar 8, 2018 at 1:54 PM, Michael Matz <m...@suse.de> wrote: > Hi, > > On Wed, 7 Mar 2018, Peter Bergner wrote: > >> On 3/7/18 12:01 AM, Jeff Law wrote: >> > I believe so by nature that the setjmp dominates the longjmp sites and >> > thus also dominates the dispatcher. But it's something I want to >> > explicitly check before resubmitting. >> >> Are we sure a setjmp has to dominate its longjmp sites? > > No, they don't have to dominate. For lack of better term I used something > like "ordered after" in my mails :) > >> Couldn't you have something like: > > Yeah, exactly.
So given all the discussion _iff_ we want to change the CFG we generate then let's invent a general __builtin_receiver () and lower setjmp to setjmp (); res = __builtin_receiver (); and construct a CFG around that. Remember that IIRC I added the abnormal edges to and from setjmp to inhibit code-motion across it so whatever CFG we'll end up with should ensure that there can't be any code-motion optimization across the above pair nor "inbetween" it. The straight-forward CFG of, apart from the fallthru from setjmp to the receiver, a abnormal edge to the dispatcher from setjmp and an abnormal edge from the dispatcher to the receiver would do that trick I think. I'd rather not do that for GCC 8 though. So to fix the warning can't we do sth else "good" and move the strange warning code from RTL to GIMPLE? Or re-do the warning? Since in the other thread about setjmp side-effects we concluded that setjmp has to preserve all call-saved regs? I don't see that reflected in regno_clobbered_at_setjmp or its caller -- that is, we should only warn for call clobbered and thus caller-saved regs because normal return may clobber the spilled values. Not sure if the PR testcase is amongst the cases fixed by such change. Richard. > > Ciao, > Michael.