mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-28 14:10:55 +00:00
Revert this. There's no way to verifiy indirect calls, and an optimizer can turn
indirect call into direct call, thus the verifier would reject something it previously accepted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72249 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9107c54693
commit
382cb2189a
@ -1024,31 +1024,6 @@ void Verifier::VerifyCallSite(CallSite CS) {
|
||||
"Call parameter type does not match function signature!",
|
||||
CS.getArgument(i), FTy->getParamType(i), I);
|
||||
|
||||
Assert2(CS.getType() == FTy->getReturnType(),
|
||||
"Call return type does not match function signature!",
|
||||
CS.getInstruction(), FTy->getReturnType());
|
||||
|
||||
// Verify calling convention for direct calls
|
||||
Value *CalledF = CS.getCalledValue()->stripPointerCasts();
|
||||
if (Function *F = dyn_cast<Function>(CalledF)) {
|
||||
unsigned CC1 = CS.getCallingConv();
|
||||
unsigned CC2 = F->getCallingConv();
|
||||
if(CC1 != CC2) {
|
||||
// tolerate some mismatch among C prototype and LLVM-specific calling conv
|
||||
if (CC2 >= CallingConv::FirstTargetCC ||
|
||||
CC1 >= CallingConv::FirstTargetCC) {
|
||||
Instruction *I = CS.getInstruction()->clone();
|
||||
if (CallInst *CI = dyn_cast<CallInst>(I)) {
|
||||
CI->setCallingConv(F->getCallingConv());
|
||||
} else
|
||||
cast<InvokeInst>(I)->setCallingConv(F->getCallingConv());
|
||||
Assert2(0,"Calling convention does not match function signature!",
|
||||
CS.getInstruction(), I);
|
||||
delete I;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (CS.getCalledValue()->getNameLen() < 5 ||
|
||||
strncmp(CS.getCalledValue()->getNameStart(), "llvm.", 5) != 0) {
|
||||
// Verify that none of the arguments are metadata...
|
||||
|
@ -1,9 +0,0 @@
|
||||
; RUN: llvm-as < %s
|
||||
|
||||
; Verify that calls with correct calling conv are accepted
|
||||
declare x86_stdcallcc i32 @re_string_construct(i8* inreg %pstr, i8* inreg %str, i32 inreg %len, i8* %trans, i32 %icase, i8* %dfa);
|
||||
define void @main() {
|
||||
entry:
|
||||
%0 = call x86_stdcallcc i32 (...)* bitcast (i32 (i8*, i8*, i32, i8*, i32, i8*)* @re_string_construct to i32 (...)*)(i32 inreg 0, i32 inreg 0, i32 inreg 0, i32 0, i32 0, i8* inttoptr (i32 673194176 to i8*));
|
||||
ret void
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
; RUN: not llvm-as < %s |& grep {Calling convention does not match function signature}
|
||||
; PR 4239
|
||||
|
||||
; Verify that the calling convention on the call instruction matches the
|
||||
; declared calling convention
|
||||
declare x86_stdcallcc i32 @re_string_construct(i8* inreg %pstr, i8* inreg %str, i32 inreg %len, i8* %trans, i32 %icase, i8* %dfa);
|
||||
define void @main() {
|
||||
entry:
|
||||
%0 = call i32 (...)* bitcast (i32 (i8*, i8*, i32, i8*, i32, i8*)* @re_string_construct to i32 (...)*)(i32 inreg 0, i32 inreg 0, i32 inreg 0, i32 0, i32 0, i8* inttoptr (i32 673194176 to i8*))
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue
Block a user