emscripten-core / emscripten-core/emscripten
Linker "invalid relocation data index" with LTO when trying to use reference types inside Emscripten
- Dominant language
- C++
- Stars
- 27.6k
- Forks
- 3.6k
- Avg merge
- 1d 1h
- Merged PRs (30d)
- 105
Description
**Version of emscripten/emsdk:**
Emscripten fork https://github.com/kainino0x/emscripten/tree/webgputable-link-error-repro
(diff: https://github.com/emscripten-core/emscripten/compare/main...kainino0x:emscripten:webgputable-link-error-repro )
```
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.53-git (46e793b39dcf56536e082855e3c5b13cb965f0f4)
clang version 18.0.0git (https://github.com/llvm/llvm-project fa6025e25b5754e8cf39169e3a7085b57ea35de5)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /Users/kainino/sources/emsdk/upstream/bin
```
**Failing command line in full:**
If this is compile or link-time failure please include the full failing command
along with its entire output.
```sh
test/runner.py other.test_webgpu_lto
```
**Full link command and output with `-v` appended:**
wasm-ld: error: lto.tmp: invalid relocation data index
```
Test suites:
['test_other']
Running test_other: (1 tests)
(checking sanity from test runner)
shared:INFO: (Emscripten: Running sanity checks)
test_webgpu_lto (test_other.other) ... "/Users/kainino/sources/emsdk/upstream/bin/clang++" -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mreference-types --sysroot=/Users/kainino/src/emscripten/cache/sysroot -DEMSCRIPTEN -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -flto -v /Users/kainino/src/emscripten/test/webgpu_jsvalstore.cpp -c -o /var/folders/9r/bp_5c83j6rb8ntvt0xhlsgr800cf_d/T/emscripten_temp_14gut9jm/webgpu_jsvalstore_0.o
clang version 18.0.0git (https://github.com/llvm/llvm-project fa6025e25b5754e8cf39169e3a7085b57ea35de5)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /Users/kainino/sources/emsdk/upstream/bin
(in-process)
"/Users/kainino/sources/emsdk/upstream/bin/clang-18" -cc1 -triple wasm32-unknown-emscripten -emit-llvm-bc -flto=full -flto-unit -disable-free -clear-ast-before-backend -main-file-name webgpu_jsvalstore.cpp -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +reference-types -debugger-tuning=gdb -fdebug-compilation-dir=/Users/kainino/src/emscripten/out/test -v -fcoverage-compilation-dir=/Users/kainino/src/emscripten/out/test -resource-dir /Users/kainino/sources/emsdk/upstream/lib/clang/18 -D EMSCRIPTEN -isysroot /Users/kainino/src/emscripten/cache/sysroot -I/usr/local/include -internal-isystem /Users/kainino/src/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1 -internal-isystem /Users/kainino/src/emscripten/cache/sysroot/include/c++/v1 -internal-isystem /Users/kainino/sources/emsdk/upstream/lib/clang/18/include -internal-isystem /Users/kainino/src/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem /Users/kainino/src/emscripten/cache/sysroot/include -fdeprecated-macro -ferror-limit 19 -fvisibility=default -fgnuc-version=4.2.1 -fcxx-exceptions -fignore-exceptions -fexceptions -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -o /var/folders/9r/bp_5c83j6rb8ntvt0xhlsgr800cf_d/T/emscripten_temp_14gut9jm/webgpu_jsvalstore_0.o -x c++ /Users/kainino/src/emscripten/test/webgpu_jsvalstore.cpp
clang -cc1 version 18.0.0git based upon LLVM 18.0.0git default target x86_64-apple-darwin23.2.0
ignoring nonexistent directory "/Users/kainino/src/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1"
ignoring nonexistent directory "/Users/kainino/src/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/Users/kainino/src/emscripten/cache/sysroot/include/fakesdl
/Users/kainino/src/emscripten/cache/sysroot/include/compat
/Users/kainino/src/emscripten/cache/sysroot/include/c++/v1
/Users/kainino/sources/emsdk/upstream/lib/clang/18/include
/Users/kainino/src/emscripten/cache/sysroot/include
End of search list.
/Users/kainino/sources/emsdk/upstream/bin/clang --version
/Users/kainino/sources/emsdk/upstream/bin/wasm-ld -o a.out.wasm /var/folders/9r/bp_5c83j6rb8ntvt0xhlsgr800cf_d/T/emscripten_temp_14gut9jm/webgpu_jsvalstore_0.o -L/Users/kainino/src/emscripten/cache/sysroot/lib/wasm32-emscripten/lto -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -lwebgpu -lwebgpu_cpp -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /var/folders/9r/bp_5c83j6rb8ntvt0xhlsgr800cf_d/T/tmprh_fn2selibemscripten_js_symbols.so -u__cxa_atexit --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=stackAlloc --export=stackSave --export=stackRestore --export=__get_temp_ret --export=__set_temp_ret --export=__wasm_call_ctors --export=malloc --export=free --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 --initial-memory=16777216 --max-memory=16777216 --no-entry --stack-first --table-base=1
wasm-ld: error: lto.tmp: invalid relocation data index
em++: error: '/Users/kainino/sources/emsdk/upstream/bin/wasm-ld -o a.out.wasm /var/folders/9r/bp_5c83j6rb8ntvt0xhlsgr800cf_d/T/emscripten_temp_14gut9jm/webgpu_jsvalstore_0.o -L/Users/kainino/src/emscripten/cache/sysroot/lib/wasm32-emscripten/lto -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -lwebgpu -lwebgpu_cpp -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /var/folders/9r/bp_5c83j6rb8ntvt0xhlsgr800cf_d/T/tmprh_fn2selibemscripten_js_symbols.so -u__cxa_atexit --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=stackAlloc --export=stackSave --export=stackRestore --export=__get_temp_ret --export=__set_temp_ret --export=__wasm_call_ctors --export=malloc --export=free --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 --initial-memory=16777216 --max-memory=16777216 --no-entry --stack-first --table-base=1' failed (returned 1)
FAIL
======================================================================
FAIL: test_webgpu_lto (test_other.other)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/kainino/src/emscripten/test/common.py", line 1406, in run_process
return shared.run_process(cmd, check=check, **args)
File "/Users/kainino/src/emscripten/tools/shared.py", line 130, in run_process
ret = subprocess.run(cmd, check=check, input=input, *args, **kw)
File "/Applications/Xcode_14.3.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['/Users/kainino/src/emscripten/em++', '/Users/kainino/src/emscripten/test/webgpu_jsvalstore.cpp', '-sUSE_WEBGPU', '-sASYNCIFY', '-sREFERENCE_TYPES', '-flto', '-v']' returned non-zero exit status 1.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/kainino/src/emscripten/test/common.py", line 605, in resulting_test
return func(self, *args)
File "/Users/kainino/src/emscripten/test/common.py", line 399, in metafunc
f(self)
File "/Users/kainino/src/emscripten/test/test_other.py", line 11818, in test_webgpu_lto
self.run_process([EMXX, test_file('webgpu_jsvalstore.cpp'), '-sUSE_WEBGPU', '-sASYNCIFY', '-sREFERENCE_TYPES', '-flto', '-v'])
File "/Users/kainino/src/emscripten/test/common.py", line 1411, in run_process
self.fail(f'subprocess exited with non-zero return code({e.returncode}): `{shared.shlex_join(cmd)}`')
AssertionError: subprocess exited with non-zero return code(1): `/Users/kainino/src/emscripten/em++ /Users/kainino/src/emscripten/test/webgpu_jsvalstore.cpp -sUSE_WEBGPU -sASYNCIFY -sREFERENCE_TYPES -flto -v`
----------------------------------------------------------------------
Ran 1 test in 1.385s
FAILED (failures=1)
None
None
```
Contributor guide
Assessment
This issue has not been assessed yet.