summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp6
-rw-r--r--llvm/test/CodeGen/WebAssembly/main-no-args.ll (renamed from llvm/test/CodeGen/WebAssembly/main.ll)0
-rw-r--r--llvm/test/CodeGen/WebAssembly/main-with-args.ll16
3 files changed, 20 insertions, 2 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
index 179dcc50540..0644f1232f6 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
@@ -244,11 +244,13 @@ bool FixFunctionBitcasts::runOnModule(Module &M) {
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 =
diff --git a/llvm/test/CodeGen/WebAssembly/main.ll b/llvm/test/CodeGen/WebAssembly/main-no-args.ll
index 09a4feaed14..09a4feaed14 100644
--- a/llvm/test/CodeGen/WebAssembly/main.ll
+++ b/llvm/test/CodeGen/WebAssembly/main-no-args.ll
diff --git a/llvm/test/CodeGen/WebAssembly/main-with-args.ll b/llvm/test/CodeGen/WebAssembly/main-with-args.ll
new file mode 100644
index 00000000000..aa085409756
--- /dev/null
+++ b/llvm/test/CodeGen/WebAssembly/main-with-args.ll
@@ -0,0 +1,16 @@
+; RUN: llc < %s -asm-verbose=false -wasm-temporary-workarounds=false | FileCheck %s
+
+; 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 i32 @main(i32 %a, i8** %b) {
+ ret i32 0
+}
+
+; CHECK-LABEL: main:
+; CHECK-NEXT: .param i32, i32
+; CHECK-NEXT: .result i32
+
+; CHECK-NOT: __original_main:
OpenPOWER on IntegriCloud