<div dir="ltr">I create simple IR code that uses llvm.eh.sjlj.setjmp and <span style="font-size:13.1999998092651px">llvm.eh.sjlj.longjmp</span><div><br></div><div><div>define i32 @main() {</div><div>  %buf = alloca i8, i32 40, align 16</div><div>  %r = call i32 @llvm.eh.sjlj.setjmp(i8* %buf)</div><div><br></div><div>  %normal = icmp eq i32 %r, 0</div><div>  br i1 %normal, label %Normal, label %Jump</div><div><br></div><div>Normal:</div><div>  call void @llvm.eh.sjlj.longjmp(i8* %buf)</div><div>  ret i32 2</div><div><br></div><div>Jump:</div><div>  ret i32 0</div><div>}</div><div><br></div><div>declare i32 @llvm.eh.sjlj.setjmp(i8* %setjmp_buf) returns_twice nounwind</div><div>declare void @llvm.eh.sjlj.longjmp(i8* %setjmp_buf) noreturn nounwind</div></div><div><br></div><div><br></div><div>On Windows 64bit and Linux 64bit this code crashes. setjmp lowering pushes only jump address to buffer, but longjmp expects also stack pointer (rsp) and bsp register values to be in the buffer.</div></div>