diff options
Diffstat (limited to 'clang/lib/CodeGen/CGExprCXX.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExprCXX.cpp | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/clang/lib/CodeGen/CGExprCXX.cpp b/clang/lib/CodeGen/CGExprCXX.cpp index 47e57032e09..548bbc9e617 100644 --- a/clang/lib/CodeGen/CGExprCXX.cpp +++ b/clang/lib/CodeGen/CGExprCXX.cpp @@ -33,8 +33,6 @@ RValue CodeGenFunction::EmitCXXMemberCall(const CXXMethodDecl *MD, assert(MD->isInstance() && "Trying to emit a member call expr on a static method!"); - const FunctionProtoType *FPT = MD->getType()->getAs<FunctionProtoType>(); - CallArgList Args; // Push the this ptr. @@ -45,13 +43,16 @@ RValue CodeGenFunction::EmitCXXMemberCall(const CXXMethodDecl *MD, QualType T = getContext().getPointerType(getContext().VoidPtrTy); Args.add(RValue::get(VTT), T); } + + const FunctionProtoType *FPT = MD->getType()->castAs<FunctionProtoType>(); + RequiredArgs required = RequiredArgs::forPrototypePlus(FPT, Args.size()); - // And the rest of the call args + // And the rest of the call args. EmitCallArgs(Args, FPT, ArgBeg, ArgEnd); - QualType ResultType = FPT->getResultType(); - return EmitCall(CGM.getTypes().getFunctionInfo(ResultType, Args, - FPT->getExtInfo()), + return EmitCall(CGM.getTypes().arrangeFunctionCall(FPT->getResultType(), Args, + FPT->getExtInfo(), + required), Callee, ReturnValue, Args, MD); } @@ -229,17 +230,16 @@ RValue CodeGenFunction::EmitCXXMemberCallExpr(const CXXMemberCallExpr *CE, // Compute the function type we're calling. const CGFunctionInfo *FInfo = 0; if (isa<CXXDestructorDecl>(MD)) - FInfo = &CGM.getTypes().getFunctionInfo(cast<CXXDestructorDecl>(MD), - Dtor_Complete); + FInfo = &CGM.getTypes().arrangeCXXDestructor(cast<CXXDestructorDecl>(MD), + Dtor_Complete); else if (isa<CXXConstructorDecl>(MD)) - FInfo = &CGM.getTypes().getFunctionInfo(cast<CXXConstructorDecl>(MD), - Ctor_Complete); + FInfo = &CGM.getTypes().arrangeCXXConstructorDeclaration( + cast<CXXConstructorDecl>(MD), + Ctor_Complete); else - FInfo = &CGM.getTypes().getFunctionInfo(MD); + FInfo = &CGM.getTypes().arrangeCXXMethodDeclaration(MD); - const FunctionProtoType *FPT = MD->getType()->getAs<FunctionProtoType>(); - llvm::Type *Ty - = CGM.getTypes().GetFunctionType(*FInfo, FPT->isVariadic()); + llvm::Type *Ty = CGM.getTypes().GetFunctionType(*FInfo); // C++ [class.virtual]p12: // Explicit qualification with the scope operator (5.1) suppresses the @@ -322,7 +322,7 @@ CodeGenFunction::EmitCXXMemberPointerCallExpr(const CXXMemberCallExpr *E, // And the rest of the call args EmitCallArgs(Args, FPT, E->arg_begin(), E->arg_end()); - return EmitCall(CGM.getTypes().getFunctionInfo(Args, FPT), Callee, + return EmitCall(CGM.getTypes().arrangeFunctionCall(Args, FPT), Callee, ReturnValue, Args); } @@ -945,7 +945,7 @@ namespace { DeleteArgs.add(getPlacementArgs()[I], *AI++); // Call 'operator delete'. - CGF.EmitCall(CGF.CGM.getTypes().getFunctionInfo(DeleteArgs, FPT), + CGF.EmitCall(CGF.CGM.getTypes().arrangeFunctionCall(DeleteArgs, FPT), CGF.CGM.GetAddrOfFunction(OperatorDelete), ReturnValueSlot(), DeleteArgs, OperatorDelete); } @@ -1006,7 +1006,7 @@ namespace { } // Call 'operator delete'. - CGF.EmitCall(CGF.CGM.getTypes().getFunctionInfo(DeleteArgs, FPT), + CGF.EmitCall(CGF.CGM.getTypes().arrangeFunctionCall(DeleteArgs, FPT), CGF.CGM.GetAddrOfFunction(OperatorDelete), ReturnValueSlot(), DeleteArgs, OperatorDelete); } @@ -1113,7 +1113,8 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) { // TODO: kill any unnecessary computations done for the size // argument. } else { - RV = EmitCall(CGM.getTypes().getFunctionInfo(allocatorArgs, allocatorType), + RV = EmitCall(CGM.getTypes().arrangeFunctionCall(allocatorArgs, + allocatorType), CGM.GetAddrOfFunction(allocator), ReturnValueSlot(), allocatorArgs, allocator); } @@ -1236,7 +1237,7 @@ void CodeGenFunction::EmitDeleteCall(const FunctionDecl *DeleteFD, DeleteArgs.add(RValue::get(Size), SizeTy); // Emit the call to delete. - EmitCall(CGM.getTypes().getFunctionInfo(DeleteArgs, DeleteFTy), + EmitCall(CGM.getTypes().arrangeFunctionCall(DeleteArgs, DeleteFTy), CGM.GetAddrOfFunction(DeleteFD), ReturnValueSlot(), DeleteArgs, DeleteFD); } @@ -1283,9 +1284,8 @@ static void EmitObjectDelete(CodeGenFunction &CGF, } llvm::Type *Ty = - CGF.getTypes().GetFunctionType(CGF.getTypes().getFunctionInfo(Dtor, - Dtor_Complete), - /*isVariadic=*/false); + CGF.getTypes().GetFunctionType( + CGF.getTypes().arrangeCXXDestructor(Dtor, Dtor_Complete)); llvm::Value *Callee = CGF.BuildVirtualCall(Dtor, @@ -1393,7 +1393,7 @@ namespace { } // Emit the call to delete. - CGF.EmitCall(CGF.getTypes().getFunctionInfo(Args, DeleteFTy), + CGF.EmitCall(CGF.getTypes().arrangeFunctionCall(Args, DeleteFTy), CGF.CGM.GetAddrOfFunction(OperatorDelete), ReturnValueSlot(), Args, OperatorDelete); } |