"Setjmp/Longjmp (SJLJ) based exception handling uses LLVM intrinsics
llvm.eh.sjlj.setjmp and llvm.eh.sjlj.longjmp to handle control flow
for exception handling."
Is this still true at least for X86?
"clang++ -fsjlj-exceptions -fcxx-exceptions -S -emit-llvm -O1 eh.cpp"
still gives me the usual invoke, landingpad etc..
Or llvm.eh.sjlj.* are only lowered from corresponding clang builtins?
I don’t think llvm.eh.sjlj.setjmp is involved, but the backend does a bunch of preparation in IR in the SjLjEHPrepare pass. Check it out here:
So, the documentation is true in the sense that LLVM intrinsics are used to set up a context that is compatible with llvm.eh.sjlj.longjmp, which the EH runtime will call. We could update it to indicate that this lowering happens late during codegen to clarify things.