diff --git a/test/test_core.py b/test/test_core.py index 0c9611728978a..b2246ece06025 100644 --- a/test/test_core.py +++ b/test/test_core.py @@ -2757,6 +2757,22 @@ def test_copyop(self): # (llvm-gcc copies items one by one). self.do_core_test('test_copyop.cpp') + # Verify that when passing -mno-bulk-memory -mno-bulk-memory-opt, that the + # resulting .wasm module should not have the bulk-memory Data Count section. + @no_wasm2js('This test verifies .wasm module behavior') + @no_esm_integration('TODO: Currently fails') + def test_no_bulk_memory(self): + if self.get_setting('MEMORY64') == 1: + self.skipTest('Wasm64 always has bulk-memory') + if self.get_setting('MEMORY64') == 2: + self.skipTest('TODO: Currently fails') + + self.emcc(test_file('hello_world.c'), ['-mno-bulk-memory', '-mno-bulk-memory-opt']) + + with webassembly.Module('a.out.wasm') as module: + for s in module.sections(): + self.assertNotEqual(s.type, webassembly.SecType.DATACOUNT) + @parameterized({ '': ([],), 'bulkmem': (['-mbulk-memory'],), diff --git a/tools/emscripten.py b/tools/emscripten.py index 793b40620ee61..b100d581a67f6 100644 --- a/tools/emscripten.py +++ b/tools/emscripten.py @@ -23,6 +23,7 @@ from tools import building from tools import config from tools import diagnostics +from tools import feature_matrix from tools import js_manipulation from tools import shared from tools import utils @@ -116,6 +117,12 @@ def update_settings_glue(wasm_file, metadata, base_metadata): # start with the MVP features, and add any detected features. settings.BINARYEN_FEATURES = ['--mvp-features'] + metadata.features + if not feature_matrix.caniuse(feature_matrix.Feature.BULK_MEMORY): + if '--enable-bulk-memory' in settings.BINARYEN_FEATURES: + settings.BINARYEN_FEATURES.remove('--enable-bulk-memory') + if '--enable-bulk-memory-opt' in settings.BINARYEN_FEATURES: + settings.BINARYEN_FEATURES.remove('--enable-bulk-memory-opt') + if settings.ASYNCIFY == 2: settings.BINARYEN_FEATURES += ['--enable-reference-types']