mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Verifier: Don't reject varargs callee cleanup functions
We've rejected these kinds of functions since r28405 in 2006 because it's impossible to lower the return of a callee cleanup varargs function. However there are lots of legal ways to leave such a function without returning, such as aborting. Today we can leave a function with a musttail call to another function with the correct prototype, and everything works out. I'm removing the verifier check declaring that a normal return from such a function is UB. Reviewed By: nlewycky Differential Revision: http://reviews.llvm.org/D5059 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216779 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1055,20 +1055,19 @@ void Verifier::visitFunction(const Function &F) {
|
||||
"Attribute 'builtin' can only be applied to a callsite.", &F);
|
||||
|
||||
// Check that this function meets the restrictions on this calling convention.
|
||||
// Sometimes varargs is used for perfectly forwarding thunks, so some of these
|
||||
// restrictions can be lifted.
|
||||
switch (F.getCallingConv()) {
|
||||
default:
|
||||
break;
|
||||
case CallingConv::C:
|
||||
break;
|
||||
case CallingConv::Fast:
|
||||
case CallingConv::Cold:
|
||||
case CallingConv::X86_FastCall:
|
||||
case CallingConv::X86_ThisCall:
|
||||
case CallingConv::Intel_OCL_BI:
|
||||
case CallingConv::PTX_Kernel:
|
||||
case CallingConv::PTX_Device:
|
||||
Assert1(!F.isVarArg(),
|
||||
"Varargs functions must have C calling conventions!", &F);
|
||||
Assert1(!F.isVarArg(), "Calling convention does not support varargs or "
|
||||
"perfect forwarding!", &F);
|
||||
break;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user