diff options
-rw-r--r-- | src/wasm/wasm-emscripten.cpp | 16 | ||||
-rw-r--r-- | test/lld/basic_safe_stack.wat.out | 2 | ||||
-rw-r--r-- | test/lld/duplicate_imports.wat.out | 2 |
3 files changed, 12 insertions, 8 deletions
diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp index bba638cf2..fea5048f6 100644 --- a/src/wasm/wasm-emscripten.cpp +++ b/src/wasm/wasm-emscripten.cpp @@ -477,12 +477,16 @@ std::string EmscriptenGlueGenerator::generateEmscriptenMetadata() { if (exp) { if (exp->kind == ExternalKind::Function) { auto* main = wasm.getFunction(exp->value); - mainReadsParams = true; - // If main does not read its parameters, it will just be a stub that - // calls __original_main (which has no parameters). - if (auto* call = main->body->dynCast<Call>()) { - if (call->operands.empty()) { - mainReadsParams = false; + mainReadsParams = main->getNumParams() > 0; + if (mainReadsParams) { + // Main could also be stub that just calls __original_main with + // no parameters. + // TODO(sbc): Remove this once https://reviews.llvm.org/D75277 + // lands. + if (auto* call = main->body->dynCast<Call>()) { + if (call->operands.empty()) { + mainReadsParams = false; + } } } } diff --git a/test/lld/basic_safe_stack.wat.out b/test/lld/basic_safe_stack.wat.out index 6e1b83712..9ed9eb221 100644 --- a/test/lld/basic_safe_stack.wat.out +++ b/test/lld/basic_safe_stack.wat.out @@ -107,7 +107,7 @@ }, "invokeFuncs": [ ], - "mainReadsParams": 1, + "mainReadsParams": 0, "features": [ ] } diff --git a/test/lld/duplicate_imports.wat.out b/test/lld/duplicate_imports.wat.out index 38a08e50f..68f4d96a6 100644 --- a/test/lld/duplicate_imports.wat.out +++ b/test/lld/duplicate_imports.wat.out @@ -85,7 +85,7 @@ "invokeFuncs": [ "invoke_ffd" ], - "mainReadsParams": 1, + "mainReadsParams": 0, "features": [ ] } |