Skip to content

SyntaxError when exporting name containing period #23560

Open
@rdb

Description

@rdb

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions