Emscripten: setjmp / longjmp завершается ошибкой, но запускается при компиляции - PullRequest
0 голосов
/ 30 марта 2020

Ref: https://fanf.livejournal.com/105413.html

TL; DR: Есть ли разница между тем, как работает SJLJ при компиляции с G CC и при компиляции с LLVM / Emscripten?

Я попытался запустить следующий код как в браузере, так и в командной строке. В первом случае происходит сбой в тот момент, когда я пытаюсь перейти к ранее созданной точке:

spawning 1
coroutine 1 at 0x67cbb4 arg 0x7e8
jumping to 0
spawning 2
coroutine 2 at 0x67bbb4 arg 0x7e8
jumping to 0
spawning 3
coroutine 3 at 0x67abb4 arg 0x7e8
jumping to 2
> Exception thrown: longjmp

, тогда как при компиляции с G CC я получаю:

spawning 1
coroutine 1 at 0x7fffeef84048 arg 0x7f1ffdde94e0
jumping to 0
spawning 2
coroutine 2 at 0x7fffeef83048 arg 0x7f1ffdde94e0
jumping to 0
spawning 3
coroutine 3 at 0x7fffeef82048 arg 0x7f1ffdde94e0
jumping to 0
spawning 4
coroutine 4 at 0x7fffeef81048 arg 0x7f1ffdde94e0
jumping to 3
coroutine 3 at 0x7fffeef82048 arg 0x7f1ffdde94e1
jumping to 1
coroutine 1 at 0x7fffeef84048 arg 0x7f1ffdde94e2
jumping to 3
coroutine 3 at 0x7fffeef82048 arg 0x7f1ffdde94e3
jumping to 2
coroutine 2 at 0x7fffeef83048 arg 0x7f1ffdde94e4
jumping to 0
spawning 5
coroutine 5 at 0x7fffeef80048 arg 0x7f1ffdde94e0
jumping to 4
> runs forever
...