forked from OSchip/llvm-project
[WebAssembly] Fix signature of `main` in FixFunctionBitcasts
Also, add a check to ensure that when main has the expected signature we do not create a wrapper. Differential Revision: https://reviews.llvm.org/D51562 llvm-svn: 342157
This commit is contained in:
parent
dbdd46da18
commit
79c054f6b8
|
@ -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 =
|
||||
|
|
|
@ -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:
|
Loading…
Reference in New Issue