Open
Description
When exporting a name containing a full stop character, emscripten generates a JavaScript file containing invalid syntax.
Version of emscripten/emsdk:
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 4.0.2 (7591f1c5ea0adf6f4293cfba2995ee9700aa0d93)
clang version 21.0.0git (https:/github.com/llvm/llvm-project 9534d27e3321a3b9e6e79fe6328445575bf26b7b)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /home/rdb/local/src/emsdk/upstream/bin
Failing command line in full:
emcc -o test.js -x c - << EOF
__attribute__((export_name("my.func")))
void myfunc() {
}
EOF
node test.js
Output:
/tmp/test.js:955
var _my.func = Module['_my.func'] = createExportWrapper('my.func', 0);
^
SyntaxError: Unexpected token '.'
at wrapSafe (node:internal/modules/cjs/loader:1378:20)
at Module._compile (node:internal/modules/cjs/loader:1428:41)
at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
at Module.load (node:internal/modules/cjs/loader:1288:32)
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:173:12)
at node:internal/main/run_main_module:28:49
Node.js v20.18.1
Full link command and output with -v
appended:
/home/rdb/local/src/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/home/rdb/local/src/emsdk/upstream/emscripten/cache/sysroot -DEMSCRIPTEN -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -xc -c - -o /tmp/emscripten_temp_8m5w0anc/-_0.o
clang version 21.0.0git (https:/github.com/llvm/llvm-project 9534d27e3321a3b9e6e79fe6328445575bf26b7b)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /home/rdb/local/src/emsdk/upstream/bin
(in-process)
"/home/rdb/local/src/emsdk/upstream/bin/clang-21" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name - -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=/tmp -v -fcoverage-compilation-dir=/tmp -resource-dir /home/rdb/local/src/emsdk/upstream/lib/clang/21 -D EMSCRIPTEN -isysroot /home/rdb/local/src/emsdk/upstream/emscripten/cache/sysroot -internal-isystem /home/rdb/local/src/emsdk/upstream/lib/clang/21/include -internal-isystem /home/rdb/local/src/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem /home/rdb/local/src/emsdk/upstream/emscripten/cache/sysroot/include -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o /tmp/emscripten_temp_8m5w0anc/-_0.o -x c -
clang -cc1 version 21.0.0git based upon LLVM 21.0.0git default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/home/rdb/local/src/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
/home/rdb/local/src/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl
/home/rdb/local/src/emsdk/upstream/emscripten/cache/sysroot/include/compat
/home/rdb/local/src/emsdk/upstream/lib/clang/21/include
/home/rdb/local/src/emsdk/upstream/emscripten/cache/sysroot/include
End of search list.
/home/rdb/local/src/emsdk/upstream/bin/clang --version
/home/rdb/local/src/emsdk/upstream/bin/wasm-ld -o test.wasm -L/home/rdb/local/src/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten -L/home/rdb/local/src/emsdk/upstream/emscripten/src/lib /tmp/emscripten_temp_8m5w0anc/-_0.o -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpm796_y4ylibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1
/home/rdb/local/src/emsdk/upstream/bin/llvm-objcopy test.wasm test.wasm --remove-section=.debug* --remove-section=producers --remove-section=name
/home/rdb/local/src/emsdk/node/20.18.0_64bit/bin/node /home/rdb/local/src/emsdk/upstream/emscripten/src/compiler.mjs /tmp/tmp_lvkwr0b.json
Metadata
Metadata
Assignees
Labels
No labels