emscripten-core / emscripten-core/emscripten

dynCalls in Asyncify Add List are ignored when building with Legacy Exception Handling + Main Module

Open
#18,045 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
27.6k
Forks
3.6k
Avg merge
1d 1h
Merged PRs (30d)
105

Description

**Version of emscripten/emsdk:**

emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.20 (5d878c99921ec247d34fb26a20b5a13d60d69e93)

**Failing command line in full:**

Minimum reproducible code is here:

```cpp
# include

__attribute__((used, noinline))
void throwsException() {
throw std::exception();
}

int main() {
try {
throwsException();
} catch (...) {
printf("Catched!\n");
}

return 0;
}
```

```sh
emcc Main.cpp -o index.html -O2 -sASYNCIFY=1 -sASYNCIFY_ADD="['dynCall_v']" -sEXCEPTION_CATCHING_ALLOWED="['main']" -sMAIN_MODULE=1 -sASYNCIFY_IGNORE_INDIRECT=1
```

Result

```sh
warning: Asyncify addlist contained a non-existing function name: dynCall_v (dynCall_v)
```

`dynCall_v` is existent function because `throwsException` is called via `invoke_v` (js function) and `dynCall_v`.

**Full link command and output with `-v` appended:**

```
"/emsdk/upstream/bin/clang++" -target wasm32-unknown-emscripten -fPIC -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -emscripten-cxx-exceptions-allowed=main,__original_main,__main_argc_argv -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -DEMSCRIPTEN -D__EMSCRIPTEN_major__=3 -D__EMSCRIPTEN_minor__=1 -D__EMSCRIPTEN_tiny__=20 -I/emsdk/upstream/emscripten/cache/sysroot/include/SDL --sysroot=/emsdk/upstream/emscripten/cache/sysroot -Xclang -iwithsysroot/include/compat -O2 -v Main.cpp -c -o /var/folders/td/bx0cz6bd3w9fqf2msgv3y2mw0000gn/T/emscripten_temp_6hmfo5vv/Main_0.o
clang version 16.0.0 (https://github.com/llvm/llvm-project 75767a0f9a926641edbef08e31ec2148ff45da67)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /emsdk/upstream/bin
(in-process)
"/emsdk/upstream/bin/clang-16" -cc1 -triple wasm32-unknown-emscripten -emit-obj --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name Main.cpp -mrelocation-model pic -pic-level 2 -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-feature +mutable-globals -mllvm --force-attribute=main:noinline -mllvm --force-attribute=__original_main:noinline -mllvm --force-attribute=__main_argc_argv:noinline -target-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=gdb -v -fcoverage-compilation-dir=/Users/Owner/test -resource-dir /emsdk/upstream/lib/clang/16.0.0 -D EMSCRIPTEN -D __EMSCRIPTEN_major__=3 -D __EMSCRIPTEN_minor__=1 -D __EMSCRIPTEN_tiny__=20 -I /emsdk/upstream/emscripten/cache/sysroot/include/SDL -isysroot /emsdk/upstream/emscripten/cache/sysroot -internal-isystem /emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1 -internal-isystem /emsdk/upstream/emscripten/cache/sysroot/include/c++/v1 -internal-isystem /emsdk/upstream/lib/clang/16.0.0/include -internal-isystem /emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem /emsdk/upstream/emscripten/cache/sysroot/include -O2 -fdeprecated-macro -fdebug-compilation-dir=/Users/Owner/test -ferror-limit 19 -fvisibility default -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fcolor-diagnostics -vectorize-loops -vectorize-slp -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -emscripten-cxx-exceptions-allowed=main,__original_main,__main_argc_argv -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o /var/folders/td/bx0cz6bd3w9fqf2msgv3y2mw0000gn/T/emscripten_temp_6hmfo5vv/Main_0.o -x c++ Main.cpp
clang -cc1 version 16.0.0 based upon LLVM 16.0.0git default target x86_64-apple-darwin21.6.0
ignoring nonexistent directory "/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1"
ignoring nonexistent directory "/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
/emsdk/upstream/emscripten/cache/sysroot/include/SDL
/emsdk/upstream/emscripten/cache/sysroot/include/compat
/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1
/emsdk/upstream/lib/clang/16.0.0/include
/emsdk/upstream/emscripten/cache/sysroot/include
End of search list.
"/emsdk/upstream/bin/wasm-ld" -o index.wasm --whole-archive /var/folders/td/bx0cz6bd3w9fqf2msgv3y2mw0000gn/T/emscripten_temp_6hmfo5vv/Main_0.o -L/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/pic -lGL -lal -lhtml5 -lstubs -lnoexit -lc -ldlmalloc -lcompiler_rt -lc++ -lc++abi -lsockets --no-whole-archive -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -emscripten-cxx-exceptions-allowed=main,__original_main,__main_argc_argv,__original_main,__main_argc_argv -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --import-undefined --import-memory --export-dynamic --export-if-defined=main --export-if-defined=__get_exception_message --export-if-defined=free --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=__main_argc_argv --export-if-defined=__wasm_apply_data_relocs --export=setThrew --export=emscripten_stack_get_base --export=emscripten_stack_get_end --export=emscripten_stack_set_limits --export=stackSave --export=stackRestore --export=stackAlloc --export=__wasm_call_ctors --export=__errno_location --export=getTempRet0 --export=setTempRet0 --export=__get_temp_ret --export=__set_temp_ret --export=malloc --export=free --export=__cxa_is_pointer_type --export=__cxa_can_catch --export=raise --export=fileno --export=memcpy --export=ntohs --export=htons --export=__dl_seterr --export=emscripten_builtin_malloc --export=saveSetjmp --export=emscripten_builtin_free --export=htonl --export=sleep --export=memcmp --export=emscripten_builtin_memalign --experimental-pic -pie -z stack-size=5242880 --initial-memory=16777216 --no-entry --max-memory=16777216
"/emsdk/upstream/bin/wasm-emscripten-finalize" -g --pass-arg=legalize-js-interface-export-originals --pass-arg=legalize-js-interface-exported-helpers index.wasm -o index.wasm --detect-features
"/emsdk/node/14.18.2_64bit/bin/node" /emsdk/upstream/emscripten/src/compiler.js /var/folders/td/bx0cz6bd3w9fqf2msgv3y2mw0000gn/T/tmpdv4qyg4i.json
"/emsdk/upstream/bin/wasm-opt" --strip-dwarf --post-emscripten -O2 --low-memory-unused --asyncify --pass-arg=asyncify-relocatable --pass-arg=asyncify-ignore-indirect --pass-arg=asyncify-imports@env.emscripten_sleep,env.emscripten_wget,env.emscripten_wget_data,env.emscripten_idb_load,env.emscripten_idb_store,env.emscripten_idb_delete,env.emscripten_idb_exists,env.emscripten_idb_load_blob,env.emscripten_idb_store_blob,env.SDL_Delay,env.emscripten_scan_registers,env.emscripten_lazy_load_code,env.emscripten_fiber_swap,wasi_snapshot_preview1.fd_sync,env.__wasi_fd_sync,env._emval_await,env._dlopen_js,env.__asyncjs__* --pass-arg=asyncify-addlist@dynCall_v --zero-filled-memory --pass-arg=directize-initial-contents-immutable --strip-debug --strip-producers index.wasm -o index.wasm --mvp-features --enable-mutable-globals
warning: Asyncify addlist contained a non-existing function name: dynCall_v (dynCall_v)
"/emsdk/node/14.18.2_64bit/bin/node" /emsdk/upstream/emscripten/tools/acorn-optimizer.js /var/folders/td/bx0cz6bd3w9fqf2msgv3y2mw0000gn/T/emscripten_temp_6hmfo5vv/index.js minifyWhitespace
"/emsdk/node/14.18.2_64bit/bin/node" /emsdk/upstream/emscripten/tools/preprocessor.js /var/folders/td/bx0cz6bd3w9fqf2msgv3y2mw0000gn/T/emscripten_temp_6hmfo5vv/settings.js shell.html
"/emsdk/node/14.18.2_64bit/bin/node" /emsdk/upstream/emscripten/node_modules/.bin/html-minifier-terser index.html -o index.html --collapse-whitespace --collapse-inline-tag-whitespace --remove-comments --remove-tag-whitespace --sort-attributes --sort-class-name --decode-entities --collapse-boolean-attributes --remove-attribute-quotes --remove-redundant-attributes --remove-script-type-attributes --remove-style-link-type-attributes --use-short-doctype --minify-css true --minify-js true
```

**Additional Contexts**

* Works well when removed either `-sMAIN_MODULE=1` or ` -sASYNCIFY_IGNORE_INDIRECT=1`
* Removing optimize level from wasm-opt command lines also makes this issue not reproducible.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.