Index: lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp =================================================================== --- lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp +++ lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp @@ -244,11 +244,13 @@ if (!TemporaryWorkarounds && !F.isDeclaration() && F.getName() == "main") { Main = &F; LLVMContext &C = M.getContext(); - Type *MainArgTys[] = {PointerType::get(Type::getInt8PtrTy(C), 0), - Type::getInt32Ty(C)}; + Type *MainArgTys[] = {Type::getInt32Ty(C), + PointerType::get(Type::getInt8PtrTy(C), 0)}; FunctionType *MainTy = FunctionType::get(Type::getInt32Ty(C), MainArgTys, /*isVarArg=*/false); if (F.getFunctionType() != MainTy) { + LLVM_DEBUG(dbgs() << "Found `main` function with incorrect type: " + << *F.getFunctionType() << "\n"); Value *Args[] = {UndefValue::get(MainArgTys[0]), UndefValue::get(MainArgTys[1])}; Value *Casted = Index: test/CodeGen/WebAssembly/main-with-args.ll =================================================================== --- test/CodeGen/WebAssembly/main-with-args.ll +++ test/CodeGen/WebAssembly/main-with-args.ll @@ -1,18 +1,16 @@ ; RUN: llc < %s -asm-verbose=false -wasm-temporary-workarounds=false | FileCheck %s -; Test main functions with alternate signatures. +; Test that main function with expected signature is not wrapped target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" target triple = "wasm32-unknown-unknown" -define void @main() { - ret void +define i32 @main(i32 %a, i8** %b) { + ret i32 0 } -; CHECK-LABEL: .L__original_main: -; CHECK-NEXT: end_function - ; CHECK-LABEL: main: ; CHECK-NEXT: .param i32, i32 ; CHECK-NEXT: .result i32 -; CHECK: call .L__original_main@FUNCTION + +; CHECK-NOT: __original_main: