[LLVMdev] setjmp - longjmp
Jakob Stoklund Olesen
stoklund at 2pi.dk
Tue Oct 4 16:15:45 PDT 2011
On Oct 4, 2011, at 3:53 PM, Eli Friedman wrote:
> On Tue, Oct 4, 2011 at 3:10 PM, Khaled ElWazeer
> <khalid.alwazeer at gmail.com> wrote:
>> I have some code which has sigsetjmp / longjmp. After a longjmp, unreachable
>> is inserted, which is fine. The problem is that in the backend before
>> calling longjmp, some register was spilled to a stack location which is live
>> across the jmp. I mean, it will be live after jumping. The stack location
>> was initialized before the call to setjmp, and is used afterwards.
>> Is there any bug in handling such a case? I mean, how do LLVM knows about
>> CFG in case of longjmp / setjmp calls?
> No, no handling; we just don't inline anything into functions which
> call setjmp, and hope we get lucky. In practice, that's generally
> good enough, given the restrictions on functions that call setjmp, but
> there are probably some subtle bugs nobody has discovered yet.
We already disable stack slot sharing in functions that callsFunctionThatReturnsTwice():
// If there are calls to setjmp or sigsetjmp, don't perform stack slot
// coloring. The stack could be modified before the longjmp is executed,
// resulting in the wrong value being used afterwards. (See
It might be possible for register coalescing to break something as well.
More information about the llvm-dev