pub fn comes_back(func: &Func, names: &Interner, elsewhere: &Elsewhere) -> boolExpand description
Whether control can come back into this function a second time from one call, through a
__builtin_setjmp or a call to one of TWICE or to a function declared returns_twice.
The frame of such a function is laid out with nothing sharing anything. A value computed before
the setjmp and read after the longjmp is live across the call on the arm that reads it, and
dead on the arm that ran first, so liveness lets that arm reuse its spill slot. Registers are
safe, since the jump puts back the callee saved registers the setjmp wrote down, but a spill
slot is only memory and comes back holding whatever the first arm left in it. 7.13.2.1p3 only
lets a local that changed after the setjmp come back indeterminate, and this one did not.
Postgresās PG_TRY is sigsetjmp with exactly this shape, and gcc answers the same way by
giving nothing live across such a call a slot it shares.