From 228a62619c60f5ad7d176ddd872cd10c8d1cd6c8 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Sat, 15 Nov 2025 09:41:21 -0800 Subject: [PATCH] Fix core_2gb.test_memprof_requirements This was broken by #25568. This fixes the regression and updates an existing test to catch it. --- test/codesize/test_codesize_hello_O0.json | 4 ++-- .../test_codesize_minimal_O0.expected.js | 22 +++++++++---------- test/codesize/test_codesize_minimal_O0.json | 4 ++-- test/codesize/test_unoptimized_code_size.json | 6 ++--- test/test_core.py | 6 +++-- tools/emscripten.py | 7 ++++-- 6 files changed, 27 insertions(+), 22 deletions(-) diff --git a/test/codesize/test_codesize_hello_O0.json b/test/codesize/test_codesize_hello_O0.json index ac80bb514f9d2..a93d8142c551e 100644 --- a/test/codesize/test_codesize_hello_O0.json +++ b/test/codesize/test_codesize_hello_O0.json @@ -1,10 +1,10 @@ { "a.out.js": 24194, - "a.out.js.gz": 8694, + "a.out.js.gz": 8693, "a.out.nodebug.wasm": 15144, "a.out.nodebug.wasm.gz": 7460, "total": 39338, - "total_gz": 16154, + "total_gz": 16153, "sent": [ "fd_write" ], diff --git a/test/codesize/test_codesize_minimal_O0.expected.js b/test/codesize/test_codesize_minimal_O0.expected.js index 7df50c3cb230d..ccc4741c60784 100644 --- a/test/codesize/test_codesize_minimal_O0.expected.js +++ b/test/codesize/test_codesize_minimal_O0.expected.js @@ -1329,28 +1329,28 @@ var wasmMemory = makeInvalidEarlyAccess('wasmMemory'); function assignWasmExports(wasmExports) { assert(typeof wasmExports['add'] != 'undefined', 'missing Wasm export: add'); - _add = Module['_add'] = createExportWrapper('add', 2); assert(typeof wasmExports['fflush'] != 'undefined', 'missing Wasm export: fflush'); - _fflush = createExportWrapper('fflush', 1); assert(typeof wasmExports['emscripten_stack_init'] != 'undefined', 'missing Wasm export: emscripten_stack_init'); - _emscripten_stack_init = wasmExports['emscripten_stack_init']; assert(typeof wasmExports['emscripten_stack_get_free'] != 'undefined', 'missing Wasm export: emscripten_stack_get_free'); - _emscripten_stack_get_free = wasmExports['emscripten_stack_get_free']; assert(typeof wasmExports['emscripten_stack_get_base'] != 'undefined', 'missing Wasm export: emscripten_stack_get_base'); - _emscripten_stack_get_base = wasmExports['emscripten_stack_get_base']; assert(typeof wasmExports['emscripten_stack_get_end'] != 'undefined', 'missing Wasm export: emscripten_stack_get_end'); - _emscripten_stack_get_end = wasmExports['emscripten_stack_get_end']; assert(typeof wasmExports['_emscripten_stack_restore'] != 'undefined', 'missing Wasm export: _emscripten_stack_restore'); - __emscripten_stack_restore = wasmExports['_emscripten_stack_restore']; assert(typeof wasmExports['_emscripten_stack_alloc'] != 'undefined', 'missing Wasm export: _emscripten_stack_alloc'); - __emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc']; assert(typeof wasmExports['emscripten_stack_get_current'] != 'undefined', 'missing Wasm export: emscripten_stack_get_current'); - _emscripten_stack_get_current = wasmExports['emscripten_stack_get_current']; assert(typeof wasmExports['memory'] != 'undefined', 'missing Wasm export: memory'); - memory = wasmMemory = wasmExports['memory']; assert(typeof wasmExports['global_val'] != 'undefined', 'missing Wasm export: global_val'); - _global_val = Module['_global_val'] = wasmExports['global_val'].value; assert(typeof wasmExports['__indirect_function_table'] != 'undefined', 'missing Wasm export: __indirect_function_table'); + _add = Module['_add'] = createExportWrapper('add', 2); + _fflush = createExportWrapper('fflush', 1); + _emscripten_stack_init = wasmExports['emscripten_stack_init']; + _emscripten_stack_get_free = wasmExports['emscripten_stack_get_free']; + _emscripten_stack_get_base = wasmExports['emscripten_stack_get_base']; + _emscripten_stack_get_end = wasmExports['emscripten_stack_get_end']; + __emscripten_stack_restore = wasmExports['_emscripten_stack_restore']; + __emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc']; + _emscripten_stack_get_current = wasmExports['emscripten_stack_get_current']; + memory = wasmMemory = wasmExports['memory']; + _global_val = Module['_global_val'] = wasmExports['global_val'].value; __indirect_function_table = wasmExports['__indirect_function_table']; } diff --git a/test/codesize/test_codesize_minimal_O0.json b/test/codesize/test_codesize_minimal_O0.json index f1335a09ac0b8..23fd139a23d84 100644 --- a/test/codesize/test_codesize_minimal_O0.json +++ b/test/codesize/test_codesize_minimal_O0.json @@ -1,10 +1,10 @@ { "a.out.js": 19489, - "a.out.js.gz": 7016, + "a.out.js.gz": 7012, "a.out.nodebug.wasm": 1136, "a.out.nodebug.wasm.gz": 659, "total": 20625, - "total_gz": 7675, + "total_gz": 7671, "sent": [], "imports": [], "exports": [ diff --git a/test/codesize/test_unoptimized_code_size.json b/test/codesize/test_unoptimized_code_size.json index 91b1d059924c6..f13d98ecfa34b 100644 --- a/test/codesize/test_unoptimized_code_size.json +++ b/test/codesize/test_unoptimized_code_size.json @@ -1,6 +1,6 @@ { "hello_world.js": 56928, - "hello_world.js.gz": 17700, + "hello_world.js.gz": 17707, "hello_world.wasm": 15144, "hello_world.wasm.gz": 7460, "no_asserts.js": 26632, @@ -8,9 +8,9 @@ "no_asserts.wasm": 12193, "no_asserts.wasm.gz": 5990, "strict.js": 54943, - "strict.js.gz": 17045, + "strict.js.gz": 17053, "strict.wasm": 15144, "strict.wasm.gz": 7455, "total": 180984, - "total_gz": 64534 + "total_gz": 64549 } diff --git a/test/test_core.py b/test/test_core.py index 40431c8dc4118..5cc87c1bee1dc 100644 --- a/test/test_core.py +++ b/test/test_core.py @@ -4626,10 +4626,12 @@ def test_dylink_global_var_export(self): int main(void) { void* js_address = EM_ASM_PTR({ - console.log("JS:_my_number:", _my_number, HEAP32[_my_number/4]); + var value = HEAP32[_my_number/4]; + console.log("JS:_my_number:", _my_number, value); + assert(value == 123456, value); return _my_number; }); - printf("C: my_number: %ld %d\n", (long)&my_number, my_number); + printf("C: my_number: %lu %d\n", (uintptr_t)&my_number, my_number); assert(js_address == &my_number); return 0; } diff --git a/tools/emscripten.py b/tools/emscripten.py index 820b575f767e8..c85a09283227e 100644 --- a/tools/emscripten.py +++ b/tools/emscripten.py @@ -957,6 +957,9 @@ def create_receiving(function_exports, other_exports, library_symbols, aliases): do_module_exports = (settings.MODULARIZE or not settings.MINIMAL_RUNTIME) and settings.MODULARIZE != 'instance' receiving.append('\nfunction assignWasmExports(wasmExports) {') + if settings.ASSERTIONS: + for sym in exports: + receiving.append(f" assert(typeof wasmExports['{sym}'] != 'undefined', 'missing Wasm export: {sym}');") for sym, info in exports.items(): is_function = type(info) == webassembly.FuncType mangled = asmjs_mangle(sym) @@ -966,8 +969,6 @@ def create_receiving(function_exports, other_exports, library_symbols, aliases): assignment += f" = dynCalls['{sig_str}']" if do_module_exports and should_export(mangled): assignment += f" = Module['{mangled}']" - if settings.ASSERTIONS: - receiving.append(f" assert(typeof wasmExports['{sym}'] != 'undefined', 'missing Wasm export: {sym}');") if sym in alias_inverse_map: for target in alias_inverse_map[sym]: assignment += f" = {target}" @@ -983,6 +984,8 @@ def create_receiving(function_exports, other_exports, library_symbols, aliases): value = f"wasmExports['{sym}'].value" if settings.MEMORY64: value = f'Number({value})' + elif settings.CAN_ADDRESS_2GB: + value = f'({value}) >>> 0' receiving.append(f" {assignment} = {value};") else: receiving.append(f" {assignment} = wasmExports['{sym}'];")