emscripten-core / emscripten-core/emscripten
terser.js: RangeError: Set maximum size exceeded
- Lenguaje dominante
- C++
- Estrellas
- 27.6k
- Forks
- 3.6k
- Merge medio
- 1 d 14 h
- PR fusionados (30 d)
- 125
Descripción
okay. I will dump a lot of information. bear with me. I had three difficulties, but only the last one matters. you can skip to the end for the real issue, the rest until then is only whining.
I wrote a code generator that generates one function that spans around 330110 lines (really, hundreds of thousands of lines). I remember it compiling once with Emscripten, but I don't remember the flags anymore. this code is non-critical, it is merely the fruits of my ongoing bachelor thesis. sounds a little absurd, but honestly this is so easy that this is how it will be for now.
## version and system
```
$ uname -a
MINGW64_NT-10.0-19045 DESKTOP-QIBT7ND 3.6.4-23a25d49.x86_64 2025-07-16 16:15 UTC x86_64 Msys
$ emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 4.0.14-git (96371ed7888fc78c0
40179f4d4faa82a6a07a116)
clang version 22.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:/msys64/clang64/opt/emscripten-llvm/bin
```
## problem 1: function created with `EM_JS` doesn't have external linkage when optimizations enabled
`there_she_is.c` contains the following:
```c
#define EM_JS2(...) EM_JS(__VA_ARGS__)
EM_JS2(void, there_she_is_render_html5, (__externref_t CanvasRenderingContext2D, int frame), {
// one switch..case that spans 300 thousand lines
});
```
The function-like macro EM_JS2 serves the purpose as discussed in #23690
the following on `there_she_is.h`:
```c
void there_she_is_render_html5(__externref_t CanvasRenderingContext2D, int frame);
```
and on `main.c`:
```c
#include "there_she_is.h"
EM_JS(__externref_t, get_canvas, (), {
window.censored = document.getElementById('canvas').getContext('2d');
});
static void iter(void) {
there_she_is_render_html5(get_canvas(), frame_i);
}
```
let's compile this. I have omitted all the other parts. the real files are linked in the bottom.
```
$ emcc -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -mreference-types main.c there_she_is.c -sALLOW_MEMORY_GROWTH \
--use-port=sdl2 \
-o index.html --shell-file=shell.html
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=C:/msys64/clang64/lib/emscripten/cache/sysroot -DEMSCRIPTEN -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -mreference-types -c main.c -o C:/msys64/tmp/emscripten_temp_prxuolmz/main_0.o
clang version 22.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:/msys64/clang64/opt/emscripten-llvm/bin
(in-process)
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +reference-types -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=D:/Projetos/molho -v -fcoverage-compilation-dir=D:/Projetos/molho -resource-dir C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22 -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -D EMSCRIPTEN -D FEAT_HTML5 -isysroot C:/msys64/clang64/lib/emscripten/cache/sysroot -internal-isystem C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include -std=c18 -ferror-limit 1 -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 C:/msys64/tmp/emscripten_temp_prxuolmz/main_0.o -x c main.c
clang -cc1 version 22.0.0git based upon LLVM 22.0.0git default target x86_64-w64-windows-gnu
ignoring nonexistent directory "C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/fakesdl
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/compat
C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include
C:/msys64/clang64/lib/emscripten/cache/sysroot/include
End of search list.
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=C:/msys64/clang64/lib/emscripten/cache/sysroot -DEMSCRIPTEN -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -mreference-types -c there_she_is.c -o C:/msys64/tmp/emscripten_temp_prxuolmz/there_she_is_1.o
clang version 22.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:/msys64/clang64/opt/emscripten-llvm/bin
(in-process)
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name there_she_is.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +reference-types -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=D:/Projetos/molho -v -fcoverage-compilation-dir=D:/Projetos/molho -resource-dir C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22 -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -D EMSCRIPTEN -D FEAT_HTML5 -isysroot C:/msys64/clang64/lib/emscripten/cache/sysroot -internal-isystem C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include -std=c18 -ferror-limit 1 -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 C:/msys64/tmp/emscripten_temp_prxuolmz/there_she_is_1.o -x c there_she_is.c
clang -cc1 version 22.0.0git based upon LLVM 22.0.0git default target x86_64-w64-windows-gnu
ignoring nonexistent directory "C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/fakesdl
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/compat
C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include
C:/msys64/clang64/lib/emscripten/cache/sysroot/include
End of search list.
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" --version
"C:/msys64/clang64/opt/emscripten-llvm/bin/wasm-ld.exe" -o index.wasm C:/msys64/tmp/emscripten_temp_prxuolmz/main_0.o C:/msys64/tmp/emscripten_temp_prxuolmz/there_she_is_1.o -LC:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten -LC:/msys64/clang64/lib/emscripten/src/lib C:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten/libSDL2.a -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-debug-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr C:/msys64/tmp/tmp2pbpysablibemscripten_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 --max-memory=2147483648 --initial-heap=16777216 --no-entry --stack-first --table-base=1
"C:/msys64/clang64/opt/emscripten-llvm/bin/llvm-objcopy.exe" index.wasm index.wasm '--remove-section=.debug*' --remove-section=producers --remove-section=name
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/compiler.mjs -
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/preprocessor.mjs - shell.html
```
it works. I can visually attest it works by running `$ emrun.py index.html`
let's enable optimizations (`-Oz -flto`):
```
$ emcc -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types main.c there_she_is.c -sALLOW_MEMORY_GROWTH \
--use-port=sdl2 \
-o index.html --shell-file=shell.html
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -target wasm32-unknown-emscripten -fignore-exceptions --sysroot=C:/msys64/clang64/lib/emscripten/cache/sysroot -DEMSCRIPTEN -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types -c main.c -o C:/msys64/tmp/emscripten_temp_k5foeuxk/main_0.o
clang version 22.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:/msys64/clang64/opt/emscripten-llvm/bin
(in-process)
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -cc1 -triple wasm32-unknown-emscripten -Oz -emit-llvm-bc -flto=full -flto-unit -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +reference-types -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=D:/Projetos/molho -v -fcoverage-compilation-dir=D:/Projetos/molho -resource-dir C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22 -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -D EMSCRIPTEN -D FEAT_HTML5 -isysroot C:/msys64/clang64/lib/emscripten/cache/sysroot -internal-isystem C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include -std=c18 -ferror-limit 1 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -vectorize-slp -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -o C:/msys64/tmp/emscripten_temp_k5foeuxk/main_0.o -x c main.c
clang -cc1 version 22.0.0git based upon LLVM 22.0.0git default target x86_64-w64-windows-gnu
ignoring nonexistent directory "C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/fakesdl
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/compat
C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include
C:/msys64/clang64/lib/emscripten/cache/sysroot/include
End of search list.
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -target wasm32-unknown-emscripten -fignore-exceptions --sysroot=C:/msys64/clang64/lib/emscripten/cache/sysroot -DEMSCRIPTEN -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types -c there_she_is.c -o C:/msys64/tmp/emscripten_temp_k5foeuxk/there_she_is_1.o
clang version 22.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:/msys64/clang64/opt/emscripten-llvm/bin
(in-process)
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -cc1 -triple wasm32-unknown-emscripten -Oz -emit-llvm-bc -flto=full -flto-unit -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name there_she_is.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +reference-types -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=D:/Projetos/molho -v -fcoverage-compilation-dir=D:/Projetos/molho -resource-dir C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22 -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -D EMSCRIPTEN -D FEAT_HTML5 -isysroot C:/msys64/clang64/lib/emscripten/cache/sysroot -internal-isystem C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include -std=c18 -ferror-limit 1 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -vectorize-slp -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -o C:/msys64/tmp/emscripten_temp_k5foeuxk/there_she_is_1.o -x c there_she_is.c
clang -cc1 version 22.0.0git based upon LLVM 22.0.0git default target x86_64-w64-windows-gnu
ignoring nonexistent directory "C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/fakesdl
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/compat
C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include
C:/msys64/clang64/lib/emscripten/cache/sysroot/include
End of search list.
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" --version
"C:/msys64/clang64/opt/emscripten-llvm/bin/wasm-ld.exe" -o index.wasm C:/msys64/tmp/emscripten_temp_k5foeuxk/main_0.o C:/msys64/tmp/emscripten_temp_k5foeuxk/there_she_is_1.o -LC:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten/lto -LC:/msys64/clang64/lib/emscripten/src/lib C:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libSDL2.a -lGL-getprocaddr -lal -lhtml5 -lc_optz -lstubs -lnoexit -lc -ldlmalloc -lcompiler_rt -lc++-noexcept -lc++abi-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr C:/msys64/tmp/tmpp0ild6rrlibemscripten_js_symbols.so --strip-debug -u__cxa_atexit --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=emscripten_stack_get_current --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-table -z stack-size=65536 --max-memory=2147483648 --initial-heap=16777216 --no-entry --table-base=1 --global-base=1024
wasm-ld: error: index.wasm.lto.o: undefined symbol: there_she_is_render_html5
emcc: error: 'C:/msys64/clang64/opt/emscripten-llvm/bin/wasm-ld.exe -o index.wasm C:/msys64/tmp/emscripten_temp_k5foeuxk/main_0.o C:/msys64/tmp/emscripten_temp_k5foeuxk/there_she_is_1.o -LC:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten/lto -LC:/msys64/clang64/lib/emscripten/src/lib C:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libSDL2.a -lGL-getprocaddr -lal -lhtml5 -lc_optz -lstubs -lnoexit -lc -ldlmalloc -lcompiler_rt -lc++-noexcept -lc++abi-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr C:/msys64/tmp/tmpp0ild6rrlibemscripten_js_symbols.so --strip-debug -u__cxa_atexit --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=emscripten_stack_get_current --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-table -z stack-size=65536 --max-memory=2147483648 --initial-heap=16777216 --no-entry --table-base=1 --global-base=1024' failed (returned 1)
```
borked. hint: `wasm-ld: error: index.wasm.lto.o: undefined symbol: there_she_is_render_html5`.
like, I know what `__externref_t` is an extension and this means that I'm outside the C standard, but you know, I'd like to rely on standard C semantics, that a function has external linkage unless I explicitly tell it to have internal linkage through the `static` storage-class specifier.
whatever. I changed my code generator so that `there_she_is.c` looks like this:
```c
#define EM_JS2(...) EM_JS(__VA_ARGS__)
EM_JS2(void, there_she_is_render_html5_2, (__externref_t CanvasRenderingContext2D, int frame), {
// one switch..case that spans 300 thousand lines
});
void there_she_is_render_html5(__externref_t CanvasRenderingContext2D, int frame) {
there_she_is_render_html5_2(CanvasRenderingContext2D, frame);
}
```
**now we face a different problem changes. let's see it**
## problem 2: not enough memory
with the previous kludge applied, let's compile again.
```
$ emcc -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types main.c there_she_is.c -sALLOW_MEMORY_GROWTH \
--use-port=sdl2 \
-o index.html --shell-file=shell.html
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -target wasm32-unknown-emscripten -fignore-exceptions --sysroot=C:/msys64/clang64/lib/emscripten/cache/sysroot -DEMSCRIPTEN -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types -c main.c -o C:/msys64/tmp/emscripten_temp_h86ta11d/main_0.o
clang version 22.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:/msys64/clang64/opt/emscripten-llvm/bin
(in-process)
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -cc1 -triple wasm32-unknown-emscripten -Oz -emit-llvm-bc -flto=full -flto-unit -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +reference-types -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=D:/Projetos/molho -v -fcoverage-compilation-dir=D:/Projetos/molho -resource-dir C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22 -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -D EMSCRIPTEN -D FEAT_HTML5 -isysroot C:/msys64/clang64/lib/emscripten/cache/sysroot -internal-isystem C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include -std=c18 -ferror-limit 1 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -vectorize-slp -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -o C:/msys64/tmp/emscripten_temp_h86ta11d/main_0.o -x c main.c
clang -cc1 version 22.0.0git based upon LLVM 22.0.0git default target x86_64-w64-windows-gnu
ignoring nonexistent directory "C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/fakesdl
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/compat
C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include
C:/msys64/clang64/lib/emscripten/cache/sysroot/include
End of search list.
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -target wasm32-unknown-emscripten -fignore-exceptions --sysroot=C:/msys64/clang64/lib/emscripten/cache/sysroot -DEMSCRIPTEN -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types -c there_she_is.c -o C:/msys64/tmp/emscripten_temp_h86ta11d/there_she_is_1.o
clang version 22.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:/msys64/clang64/opt/emscripten-llvm/bin
(in-process)
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -cc1 -triple wasm32-unknown-emscripten -Oz -emit-llvm-bc -flto=full -flto-unit -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name there_she_is.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +reference-types -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=D:/Projetos/molho -v -fcoverage-compilation-dir=D:/Projetos/molho -resource-dir C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22 -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -D EMSCRIPTEN -D FEAT_HTML5 -isysroot C:/msys64/clang64/lib/emscripten/cache/sysroot -internal-isystem C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include -std=c18 -ferror-limit 1 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -vectorize-slp -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -o C:/msys64/tmp/emscripten_temp_h86ta11d/there_she_is_1.o -x c there_she_is.c
clang -cc1 version 22.0.0git based upon LLVM 22.0.0git default target x86_64-w64-windows-gnu
ignoring nonexistent directory "C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/fakesdl
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/compat
C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include
C:/msys64/clang64/lib/emscripten/cache/sysroot/include
End of search list.
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" --version
"C:/msys64/clang64/opt/emscripten-llvm/bin/wasm-ld.exe" -o index.wasm C:/msys64/tmp/emscripten_temp_h86ta11d/main_0.o C:/msys64/tmp/emscripten_temp_h86ta11d/there_she_is_1.o -LC:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten/lto -LC:/msys64/clang64/lib/emscripten/src/lib C:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libSDL2.a -lGL-getprocaddr -lal -lhtml5 -lc_optz -lstubs -lnoexit -lc -ldlmalloc -lcompiler_rt -lc++-noexcept -lc++abi-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr C:/msys64/tmp/tmp0qg8mlswlibemscripten_js_symbols.so --strip-debug -u__cxa_atexit --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=emscripten_stack_get_current --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-table -z stack-size=65536 --max-memory=2147483648 --initial-heap=16777216 --no-entry --table-base=1 --global-base=1024
"C:/msys64/clang64/opt/emscripten-llvm/bin/llvm-objcopy.exe" index.wasm index.wasm '--remove-section=.debug*' --remove-section=producers --remove-section=name
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/compiler.mjs -
"C:\msys64\clang64/bin/wasm-opt" --strip-target-features --post-emscripten -Oz --low-memory-unused --zero-filled-memory --pass-arg=directize-initial-contents-immutable --no-stack-ir index.wasm -o index.wasm --mvp-features --enable-bulk-memory --enable-bulk-memory-opt --enable-call-indirect-overlong --enable-multivalue --enable-mutable-globals --enable-nontrapping-float-to-int --enable-reference-types --enable-sign-ext
"C:\msys64\clang64/bin/wasm-opt" --strip-target-features --post-emscripten -Oz --low-memory-unused --zero-filled-memory --pass-arg=directize-initial-contents-immutable --no-stack-ir index.wasm -o index.wasm --mvp-features --enable-bulk-memory --enable-bulk-memory-opt --enable-call-indirect-overlong --enable-multivalue --enable-mutable-globals --enable-nontrapping-float-to-int --enable-reference-types --enable-sign-ext
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emscripten_temp_h86ta11d/index.js AJSDCE --minify-whitespace -o C:/msys64/tmp/emscripten_temp_h86ta11d/index.jso1.js
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emscripten_temp_h86ta11d/index.js AJSDCE --minify-whitespace -o C:/msys64/tmp/emscripten_temp_h86ta11d/index.jso1.js
<--- Last few GCs --->
[5356:0000017C0532C000] 21568 ms: Scavenge (interleaved) 2031.5 (2048.1) -> 2031.4 (2053.1) MB, pooled: 0 MB, 3.67 / 0.00 ms (average mu = 0.418, current mu = 0.333) allocation failure;
[5356:0000017C0532C000] 22760 ms: Mark-Compact 2035.8 (2054.3) -> 2034.9 (2058.1) MB, pooled: 0 MB, 1188.37 / 0.00 ms (average mu = 0.219, current mu = 0.016) allocation failure; scavenge might not succeed
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
----- Native stack trace -----
1: 00007ffdf58bdff0 ZN4node16EnabledDebugList5ParseERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE+34592
2: 00007ffdf59825fe ZN4node12OnFatalErrorEPKcS1_+718
3: 00007ffdf600bd01 uv_sleep+3304065
4: 00007ffdf627f237 ZN2v88internal10HeapLayout31CheckYoungGenerationConsistencyEPKNS0_11MemoryChunkE+46247
5: 00007ffdf627cbd3 ZN2v88internal10HeapLayout31CheckYoungGenerationConsistencyEPKNS0_11MemoryChunkE+36419
6: 00007ffdf62721d0 ZN2v87CppHeap41CollectGarbageInYoungGenerationForTestingEN5cppgc18EmbedderStackStateE+295424
7: 00007ffdf62505fe ZN2v87CppHeap41CollectGarbageInYoungGenerationForTestingEN5cppgc18EmbedderStackStateE+157230
8: 00007ffdf6713fe7 ZNK2v88internal10TickSample5printEv+395959
9: 0000017c3f3b77fa
emcc: error: 'C:/msys64/clang64/bin/node.exe C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emscripten_temp_h86ta11d/index.js AJSDCE --minify-whitespace -o C:/msys64/tmp/emscripten_temp_h86ta11d/index.jso1.js' failed (returned 134)
```
**no problem**. I searched online and I found a solution. but can we finally compile? **no**
# problem 3 (the one that matters): `RangeError: Set maximum size exceeded` on `terser.js`
I got 12 GB of RAM. let's ramp up usage.
```
$ NODE_OPTIONS=--max-old-space-size-percentage=90 emcc -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types main.c there_she_is.c -sALLOW_MEMORY_GROWTH \
--use-port=sdl2 \
-o index.html --shell-file=shell.html
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -target wasm32-unknown-emscripten -fignore-exceptions --sysroot=C:/msys64/clang64/lib/emscripten/cache/sysroot -DEMSCRIPTEN -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types -c main.c -o C:/msys64/tmp/emscripten_temp_6klaj5ia/main_0.o
clang version 22.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:/msys64/clang64/opt/emscripten-llvm/bin
(in-process)
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -cc1 -triple wasm32-unknown-emscripten -Oz -emit-llvm-bc -flto=full -flto-unit -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +reference-types -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=D:/Projetos/molho -v -fcoverage-compilation-dir=D:/Projetos/molho -resource-dir C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22 -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -D EMSCRIPTEN -D FEAT_HTML5 -isysroot C:/msys64/clang64/lib/emscripten/cache/sysroot -internal-isystem C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include -std=c18 -ferror-limit 1 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -vectorize-slp -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -o C:/msys64/tmp/emscripten_temp_6klaj5ia/main_0.o -x c main.c
clang -cc1 version 22.0.0git based upon LLVM 22.0.0git default target x86_64-w64-windows-gnu
ignoring nonexistent directory "C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/fakesdl
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/compat
C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include
C:/msys64/clang64/lib/emscripten/cache/sysroot/include
End of search list.
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -target wasm32-unknown-emscripten -fignore-exceptions --sysroot=C:/msys64/clang64/lib/emscripten/cache/sysroot -DEMSCRIPTEN -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types -c there_she_is.c -o C:/msys64/tmp/emscripten_temp_6klaj5ia/there_she_is_1.o
clang version 22.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:/msys64/clang64/opt/emscripten-llvm/bin
(in-process)
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -cc1 -triple wasm32-unknown-emscripten -Oz -emit-llvm-bc -flto=full -flto-unit -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name there_she_is.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +reference-types -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=D:/Projetos/molho -v -fcoverage-compilation-dir=D:/Projetos/molho -resource-dir C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22 -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -D EMSCRIPTEN -D FEAT_HTML5 -isysroot C:/msys64/clang64/lib/emscripten/cache/sysroot -internal-isystem C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include -std=c18 -ferror-limit 1 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -vectorize-slp -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -o C:/msys64/tmp/emscripten_temp_6klaj5ia/there_she_is_1.o -x c there_she_is.c
clang -cc1 version 22.0.0git based upon LLVM 22.0.0git default target x86_64-w64-windows-gnu
ignoring nonexistent directory "C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/fakesdl
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/compat
C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include
C:/msys64/clang64/lib/emscripten/cache/sysroot/include
End of search list.
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" --version
"C:/msys64/clang64/opt/emscripten-llvm/bin/wasm-ld.exe" -o index.wasm C:/msys64/tmp/emscripten_temp_6klaj5ia/main_0.o C:/msys64/tmp/emscripten_temp_6klaj5ia/there_she_is_1.o -LC:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten/lto -LC:/msys64/clang64/lib/emscripten/src/lib C:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libSDL2.a -lGL-getprocaddr -lal -lhtml5 -lc_optz -lstubs -lnoexit -lc -ldlmalloc -lcompiler_rt -lc++-noexcept -lc++abi-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr C:/msys64/tmp/tmp_7_5cla3libemscripten_js_symbols.so --strip-debug -u__cxa_atexit --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=emscripten_stack_get_current --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-table -z stack-size=65536 --max-memory=2147483648 --initial-heap=16777216 --no-entry --table-base=1 --global-base=1024
"C:/msys64/clang64/opt/emscripten-llvm/bin/llvm-objcopy.exe" index.wasm index.wasm '--remove-section=.debug*' --remove-section=producers --remove-section=name
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/compiler.mjs -
"C:\msys64\clang64/bin/wasm-opt" --strip-target-features --post-emscripten -Oz --low-memory-unused --zero-filled-memory --pass-arg=directize-initial-contents-immutable --no-stack-ir index.wasm -o index.wasm --mvp-features --enable-bulk-memory --enable-bulk-memory-opt --enable-call-indirect-overlong --enable-multivalue --enable-mutable-globals --enable-nontrapping-float-to-int --enable-reference-types --enable-sign-ext
"C:\msys64\clang64/bin/wasm-opt" --strip-target-features --post-emscripten -Oz --low-memory-unused --zero-filled-memory --pass-arg=directize-initial-contents-immutable --no-stack-ir index.wasm -o index.wasm --mvp-features --enable-bulk-memory --enable-bulk-memory-opt --enable-call-indirect-overlong --enable-multivalue --enable-mutable-globals --enable-nontrapping-float-to-int --enable-reference-types --enable-sign-ext
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emscripten_temp_6klaj5ia/index.js AJSDCE --minify-whitespace -o C:/msys64/tmp/emscripten_temp_6klaj5ia/index.jso1.js
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emscripten_temp_6klaj5ia/index.js AJSDCE --minify-whitespace -o C:/msys64/tmp/emscripten_temp_6klaj5ia/index.jso1.js
C:\msys64\clang64\lib\emscripten\third_party\terser\terser.js:9388
printed_comments.add(comments);
^
RangeError: Set maximum size exceeded
at Set.add ()
at Object.prepend_comments (C:\msys64\clang64\lib\emscripten\third_party\terser\terser.js:9388:26)
at doit (C:\msys64\clang64\lib\emscripten\third_party\terser\terser.js:9604:20)
at AST_Number. (C:\msys64\clang64\lib\emscripten\third_party\terser\terser.js:9613:13)
at C:\msys64\clang64\lib\emscripten\third_party\terser\terser.js:10689:19
at doit (C:\msys64\clang64\lib\emscripten\third_party\terser\terser.js:9606:13)
at AST_Binary. (C:\msys64\clang64\lib\emscripten\third_party\terser\terser.js:9613:13)
at C:\msys64\clang64\lib\emscripten\third_party\terser\terser.js:10711:20
at doit (C:\msys64\clang64\lib\emscripten\third_party\terser\terser.js:9606:13)
at AST_Assign. (C:\msys64\clang64\lib\emscripten\third_party\terser\terser.js:9613:13)
Node.js v24.8.0
emcc: error: 'C:/msys64/clang64/bin/node.exe C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emscripten_temp_6klaj5ia/index.js AJSDCE --minify-whitespace -o C:/msys64/tmp/emscripten_temp_6klaj5ia/index.jso1.js' failed (returned 1)
```
now. I don't what `printed_comments` is, what purpose it serves. but yesterday it was very late in the night, I got very very angry and I decided to just wrap everything in `try..catch` clauses as it crashed and see what happens, out of spite. here are the changes I made:
```diff
--- terser.js 2025-09-20 02:35:51.751445600 -0300
+++ /clang64/lib/emscripten/third_party/terser/terser.js 2025-09-20 02:47:38.656924900 -0300
@@ -9385,7 +9385,7 @@
if (!comments) {
comments = start.comments_before = [];
}
- printed_comments.add(comments);
+ try { printed_comments.add(comments); } catch (e) { }
if (keyword_with_value) {
var tw = new TreeWalker(function(node) {
@@ -9403,7 +9403,7 @@
if (!node.start) return;
var text = node.start.comments_before;
if (text && !printed_comments.has(text)) {
- printed_comments.add(text);
+ try { printed_comments.add(text); } catch (e) { }
comments = comments.concat(text);
}
} else {
@@ -9431,6 +9431,7 @@
var last_nlb = has_nlb();
comments.forEach(function(c, i) {
printed_comments.add(c);
+ //try { printed_comments.add(c); } catch (e) { }
if (!last_nlb) {
if (c.nlb) {
print("\n");
@@ -9476,7 +9477,7 @@
if (!(node instanceof AST_Statement || comments.every((c) =>
!/comment[134]/.test(c.type)
))) return;
- printed_comments.add(comments);
+ try { printed_comments.add(comments); } catch (e) { }
var insert = OUTPUT.length();
comments.filter(comment_filter, node).forEach(function(c, i) {
if (printed_comments.has(c)) return;
```
now let's see if it compiles:
```
$ NODE_OPTIONS=--max-old-space-size-percentage=90 emcc -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types main.c there_she_is.c -sALLOW_MEMORY_GROWTH \
--use-port=sdl2 \
-o index.html --shell-file=shell.html
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -target wasm32-unknown-emscripten -fignore-exceptions --sysroot=C:/msys64/clang64/lib/emscripten/cache/sysroot -DEMSCRIPTEN -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types -c main.c -o C:/msys64/tmp/emscripten_temp_kxfk44cc/main_0.o
clang version 22.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:/msys64/clang64/opt/emscripten-llvm/bin
(in-process)
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -cc1 -triple wasm32-unknown-emscripten -Oz -emit-llvm-bc -flto=full -flto-unit -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +reference-types -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=D:/Projetos/molho -v -fcoverage-compilation-dir=D:/Projetos/molho -resource-dir C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22 -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -D EMSCRIPTEN -D FEAT_HTML5 -isysroot C:/msys64/clang64/lib/emscripten/cache/sysroot -internal-isystem C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include -std=c18 -ferror-limit 1 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -vectorize-slp -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -o C:/msys64/tmp/emscripten_temp_kxfk44cc/main_0.o -x c main.c
clang -cc1 version 22.0.0git based upon LLVM 22.0.0git default target x86_64-w64-windows-gnu
ignoring nonexistent directory "C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/fakesdl
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/compat
C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include
C:/msys64/clang64/lib/emscripten/cache/sysroot/include
End of search list.
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -target wasm32-unknown-emscripten -fignore-exceptions --sysroot=C:/msys64/clang64/lib/emscripten/cache/sysroot -DEMSCRIPTEN -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -ferror-limit=1 -std=c18 -DFEAT_HTML5 -Oz -flto -mreference-types -c there_she_is.c -o C:/msys64/tmp/emscripten_temp_kxfk44cc/there_she_is_1.o
clang version 22.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:/msys64/clang64/opt/emscripten-llvm/bin
(in-process)
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" -cc1 -triple wasm32-unknown-emscripten -Oz -emit-llvm-bc -flto=full -flto-unit -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name there_she_is.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +reference-types -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=D:/Projetos/molho -v -fcoverage-compilation-dir=D:/Projetos/molho -resource-dir C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22 -isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2 -D EMSCRIPTEN -D FEAT_HTML5 -isysroot C:/msys64/clang64/lib/emscripten/cache/sysroot -internal-isystem C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem C:/msys64/clang64/lib/emscripten/cache/sysroot/include -std=c18 -ferror-limit 1 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -vectorize-slp -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -o C:/msys64/tmp/emscripten_temp_kxfk44cc/there_she_is_1.o -x c there_she_is.c
clang -cc1 version 22.0.0git based upon LLVM 22.0.0git default target x86_64-w64-windows-gnu
ignoring nonexistent directory "C:/msys64/clang64/lib/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/SDL2
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/fakesdl
C:/msys64/clang64/lib/emscripten/cache/sysroot/include/compat
C:/msys64/clang64/opt/emscripten-llvm/lib/clang/22/include
C:/msys64/clang64/lib/emscripten/cache/sysroot/include
End of search list.
"C:/msys64/clang64/opt/emscripten-llvm/bin/clang.exe" --version
"C:/msys64/clang64/opt/emscripten-llvm/bin/wasm-ld.exe" -o index.wasm C:/msys64/tmp/emscripten_temp_kxfk44cc/main_0.o C:/msys64/tmp/emscripten_temp_kxfk44cc/there_she_is_1.o -LC:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten/lto -LC:/msys64/clang64/lib/emscripten/src/lib C:/msys64/clang64/lib/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libSDL2.a -lGL-getprocaddr -lal -lhtml5 -lc_optz -lstubs -lnoexit -lc -ldlmalloc -lcompiler_rt -lc++-noexcept -lc++abi-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr C:/msys64/tmp/tmp2m1ac2xvlibemscripten_js_symbols.so --strip-debug -u__cxa_atexit --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=emscripten_stack_get_current --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-table -z stack-size=65536 --max-memory=2147483648 --initial-heap=16777216 --no-entry --table-base=1 --global-base=1024
"C:/msys64/clang64/opt/emscripten-llvm/bin/llvm-objcopy.exe" index.wasm index.wasm '--remove-section=.debug*' --remove-section=producers --remove-section=name
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/compiler.mjs -
"C:\msys64\clang64/bin/wasm-opt" --strip-target-features --post-emscripten -Oz --low-memory-unused --zero-filled-memory --pass-arg=directize-initial-contents-immutable --no-stack-ir index.wasm -o index.wasm --mvp-features --enable-bulk-memory --enable-bulk-memory-opt --enable-call-indirect-overlong --enable-multivalue --enable-mutable-globals --enable-nontrapping-float-to-int --enable-reference-types --enable-sign-ext
"C:\msys64\clang64/bin/wasm-opt" --strip-target-features --post-emscripten -Oz --low-memory-unused --zero-filled-memory --pass-arg=directize-initial-contents-immutable --no-stack-ir index.wasm -o index.wasm --mvp-features --enable-bulk-memory --enable-bulk-memory-opt --enable-call-indirect-overlong --enable-multivalue --enable-mutable-globals --enable-nontrapping-float-to-int --enable-reference-types --enable-sign-ext
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emscripten_temp_kxfk44cc/index.js AJSDCE --minify-whitespace -o C:/msys64/tmp/emscripten_temp_kxfk44cc/index.jso1.js
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emscripten_temp_kxfk44cc/index.js AJSDCE --minify-whitespace -o C:/msys64/tmp/emscripten_temp_kxfk44cc/index.jso1.js
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emcc_acorn_info_c6sokjzz.js emitDCEGraph --no-print
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emcc_acorn_info_c6sokjzz.js emitDCEGraph --no-print
"C:\msys64\clang64/bin/wasm-metadce" --graph-file=C:/msys64/tmp/emcc_dce_graph_vlxd3z8q.json index.wasm -o index.wasm --mvp-features --enable-bulk-memory --enable-bulk-memory-opt --enable-call-indirect-overlong --enable-multivalue --enable-mutable-globals --enable-nontrapping-float-to-int --enable-reference-types --enable-sign-ext
"C:\msys64\clang64/bin/wasm-metadce" --graph-file=C:/msys64/tmp/emcc_dce_graph_vlxd3z8q.json index.wasm -o index.wasm --mvp-features --enable-bulk-memory --enable-bulk-memory-opt --enable-call-indirect-overlong --enable-multivalue --enable-mutable-globals --enable-nontrapping-float-to-int --enable-reference-types --enable-sign-ext
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emcc_acorn_info_8eejoyup.js applyDCEGraphRemovals --minify-whitespace -o C:/msys64/tmp/emscripten_temp_kxfk44cc/index.jso2.js
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emcc_acorn_info_8eejoyup.js applyDCEGraphRemovals --minify-whitespace -o C:/msys64/tmp/emscripten_temp_kxfk44cc/index.jso2.js
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emscripten_temp_kxfk44cc/index.jso2.js AJSDCE --minify-whitespace -o C:/msys64/tmp/emscripten_temp_kxfk44cc/index.jso3.js
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emscripten_temp_kxfk44cc/index.jso2.js AJSDCE --minify-whitespace -o C:/msys64/tmp/emscripten_temp_kxfk44cc/index.jso3.js
"C:\msys64\clang64/bin/wasm-opt" --minify-imports-and-exports-and-modules --optimize-level=2 --shrink-level=2 --optimize-stack-ir index.wasm -o index.wasm --mvp-features --enable-bulk-memory --enable-bulk-memory-opt --enable-call-indirect-overlong --enable-multivalue --enable-mutable-globals --enable-nontrapping-float-to-int --enable-reference-types --enable-sign-ext
"C:\msys64\clang64/bin/wasm-opt" --minify-imports-and-exports-and-modules --optimize-level=2 --shrink-level=2 --optimize-stack-ir index.wasm -o index.wasm --mvp-features --enable-bulk-memory --enable-bulk-memory-opt --enable-call-indirect-overlong --enable-multivalue --enable-mutable-globals --enable-nontrapping-float-to-int --enable-reference-types --enable-sign-ext
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emcc_acorn_info_x6gweayr.js applyImportAndExportNameChanges --minify-whitespace -o C:/msys64/tmp/emscripten_temp_kxfk44cc/index.jso4.js
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/acorn-optimizer.mjs C:/msys64/tmp/emcc_acorn_info_x6gweayr.js applyImportAndExportNameChanges --minify-whitespace -o C:/msys64/tmp/emscripten_temp_kxfk44cc/index.jso4.js
"C:/msys64/clang64/bin/node.exe" C:/msys64/clang64/lib/emscripten/tools/preprocessor.mjs - shell.html
"C:/msys64/clang64/lib/emscripten/node_modules/.bin/html-minifier-terser.cmd" index.html -o index.html --collapse-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
```
can it run? yes it can, I can attest it visually. so can you: https://www.newgrounds.com/projects/games/6419340/preview
did it compile correctly? I don't know, really. I can't distinguish if it could have miscompiled due to that Set not being filled correctly.
here are the files necessary to compile the program to hit the error, with `EM_JS` kludge already applied:
- [`main.c`](https://github.com/bottle2/swf2c/blob/913008057ce77a33b9fd7f684b6eea4840a94f34/main.c)
- [`there_she_is.c`](https://github.com/bottle2/swf2c/blob/913008057ce77a33b9fd7f684b6eea4840a94f34/there_she_is.c)
- [`there_she_is.h`](https://github.com/bottle2/swf2c/blob/913008057ce77a33b9fd7f684b6eea4840a94f34/there_she_is.h)
sorry for any profanity in advance.
Guía de contribución
Línea de trabajo
Reproduce la build optimizada usando main.c, there_she_is.c, there_she_is.h, shell.html, emcc y las flags -Oz -flto mostradas. Compárala con la build no optimizada que funciona e inspecciona la fase de terser.js en la que se produce el RangeError. Se considera terminado cuando la build optimizada se completa sin el error de tamaño máximo de Set.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- c, javascript, node.js, wasm
- Área
- build-system, compilers
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 25/100