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