[WebAssembly] Handle indirect uses of longjmp
In LowerEmscriptenEHSjLj, `longjmp` used to be replaced with `emscripten_longjmp_jmpbuf(jmp_buf*, i32)`, which will eventually be lowered to `emscripten_longjmp(i32, i32)`. The reason we used two different names was because they had different signatures in the IR pass. D88697 fixed this by only using `emscripten_longjmp(i32, i32)` and adding a `ptrtoint` cast to its first argument, so ``` longjmp(buf, 0) ``` becomes ``` emscripten_longjmp((i32)buf, 0) ``` But this assumed all uses of `longjmp` was a direct call to it, which was not the case. This patch handles indirect uses of `longjmp` by replacing ``` longjmp ``` with ``` (i32(*)(jmp_buf*, i32))emscripten_longjmp ``` Reviewed By: tlively Differential Revision: https://reviews.llvm.org/D89032
Loading
Please sign in to comment