emscripten-core / emscripten-core/emscripten

terser.js: RangeError: Set maximum size exceeded

オープン
#25,331 コメント 2 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
C++
スター
27.6k
フォーク
3.6k
平均マージ
1日 14時間
マージ済み PR(30日)
125

説明

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:

#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:

void there_she_is_render_html5(__externref_t CanvasRenderingContext2D, int frame);

and on main.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:

#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 (<anonymous>)
    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.<anonymous> (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.<anonymous> (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.<anonymous> (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:

--- 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:

sorry for any profanity in advance.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

main.c、there_she_is.c、there_she_is.h、shell.html、emcc、および示されている -Oz -flto フラグを使って最適化ビルドを再現します。動作する最適化なしビルドと比較し、RangeError が発生する terser.js の段階を調査します。最適化ビルドが Set の最大サイズエラーなしで完了すれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
c, javascript, node.js, wasm
領域
build-system, compilers
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。