[llvm-dev] returns_twice (original) (raw)

[llvm-dev] returns_twice / noreturn

Yichao Yu via llvm-dev llvm-dev at lists.llvm.org
Sun Nov 5 18:22:47 PST 2017


We do not implement that restricted semantics correctly either -- see https://bugs.llvm.org/showbug.cgi?id=27190

Haha, I wondered for a minute whether I should bring up that bug... We've seen pretty nasty crashes due to it and had to work around it.....

One of my recent work has also uncovered another (I believe) invalid handling of returns_twice functions.... https://bugs.llvm.org/show_bug.cgi?id=35211 noalias returns seems to be treated as stack allocation but is not required by either LangRef or C standard to be so for returns_twice function handling....

IMO the Right(TM) fix is to add a CFG edge from all possibly longjmp'ing function calls to all setjmps in a function. We can probably do this by modeling the possibly longjmp'ing calls as invokes that unwind to a special "setjmp" landingpad.

This seems to be a way to handle setjmp without requiring volatile anywhere? We've thought about doing that ourselves a little but decided that it was too complicated compare to the left over issue after the crash was worked around and it's also hard to make it handle longjmp's from signal handlers very well....



More information about the llvm-dev mailing list