forked from OSchip/llvm-project
Kill one of EmitCallArgs overloads. NFC.
llvm-svn: 216635
This commit is contained in:
parent
4f1a54a41a
commit
cbe875a507
|
@ -1716,8 +1716,7 @@ CodeGenFunction::EmitSynthesizedCXXCopyCtorCall(const CXXConstructorDecl *D,
|
|||
Args.add(RValue::get(Src), QT);
|
||||
|
||||
// Skip over first argument (Src).
|
||||
EmitCallArgs(Args, FPT->isVariadic(), FPT->param_type_begin() + 1,
|
||||
FPT->param_type_end(), E->arg_begin() + 1, E->arg_end());
|
||||
EmitCallArgs(Args, FPT, E->arg_begin() + 1, E->arg_end(), /*ParamsToSkip*/ 1);
|
||||
|
||||
EmitCall(CGM.getTypes().arrangeCXXMethodCall(Args, FPT, RequiredArgs::All),
|
||||
Callee, ReturnValueSlot(), Args, D);
|
||||
|
|
|
@ -3320,7 +3320,7 @@ RValue CodeGenFunction::EmitCall(QualType CalleeType, llvm::Value *Callee,
|
|||
|
||||
CallArgList Args;
|
||||
EmitCallArgs(Args, dyn_cast<FunctionProtoType>(FnType), E->arg_begin(),
|
||||
E->arg_end(), ForceColumnInfo);
|
||||
E->arg_end(), /*ParamsToSkip*/ 0, ForceColumnInfo);
|
||||
|
||||
const CGFunctionInfo &FnInfo =
|
||||
CGM.getTypes().arrangeFreeFunctionCall(Args, FnType);
|
||||
|
|
|
@ -1232,15 +1232,13 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) {
|
|||
llvm::Value *allocSize =
|
||||
EmitCXXNewAllocSize(*this, E, minElements, numElements,
|
||||
allocSizeWithoutCookie);
|
||||
|
||||
|
||||
allocatorArgs.add(RValue::get(allocSize), sizeType);
|
||||
|
||||
// We start at 1 here because the first argument (the allocation size)
|
||||
// has already been emitted.
|
||||
EmitCallArgs(allocatorArgs, allocatorType->isVariadic(),
|
||||
allocatorType->param_type_begin() + 1,
|
||||
allocatorType->param_type_end(), E->placement_arg_begin(),
|
||||
E->placement_arg_end());
|
||||
EmitCallArgs(allocatorArgs, allocatorType, E->placement_arg_begin(),
|
||||
E->placement_arg_end(), /*ParamsToSkip*/ 1);
|
||||
|
||||
// Emit the allocation call. If the allocator is a global placement
|
||||
// operator, just "inline" it directly.
|
||||
|
|
|
@ -2617,62 +2617,49 @@ public:
|
|||
void EmitCallArgs(CallArgList &Args, const T *CallArgTypeInfo,
|
||||
CallExpr::const_arg_iterator ArgBeg,
|
||||
CallExpr::const_arg_iterator ArgEnd,
|
||||
bool ForceColumnInfo = false) {
|
||||
if (CallArgTypeInfo) {
|
||||
EmitCallArgs(Args, CallArgTypeInfo->isVariadic(),
|
||||
CallArgTypeInfo->param_type_begin(),
|
||||
CallArgTypeInfo->param_type_end(), ArgBeg, ArgEnd,
|
||||
ForceColumnInfo);
|
||||
} else {
|
||||
// T::param_type_iterator might not have a default ctor.
|
||||
const QualType *NoIter = nullptr;
|
||||
EmitCallArgs(Args, /*AllowExtraArguments=*/true, NoIter, NoIter, ArgBeg,
|
||||
ArgEnd, ForceColumnInfo);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename ArgTypeIterator>
|
||||
void EmitCallArgs(CallArgList& Args,
|
||||
bool AllowExtraArguments,
|
||||
ArgTypeIterator ArgTypeBeg,
|
||||
ArgTypeIterator ArgTypeEnd,
|
||||
CallExpr::const_arg_iterator ArgBeg,
|
||||
CallExpr::const_arg_iterator ArgEnd,
|
||||
bool ForceColumnInfo = false) {
|
||||
unsigned ParamsToSkip = 0, bool ForceColumnInfo = false) {
|
||||
SmallVector<QualType, 16> ArgTypes;
|
||||
CallExpr::const_arg_iterator Arg = ArgBeg;
|
||||
|
||||
// First, use the argument types that the type info knows about
|
||||
for (ArgTypeIterator I = ArgTypeBeg, E = ArgTypeEnd; I != E; ++I, ++Arg) {
|
||||
assert(Arg != ArgEnd && "Running over edge of argument list!");
|
||||
assert((ParamsToSkip == 0 || CallArgTypeInfo) &&
|
||||
"Can't skip parameters if type info is not provided");
|
||||
if (CallArgTypeInfo) {
|
||||
// First, use the argument types that the type info knows about
|
||||
for (auto I = CallArgTypeInfo->param_type_begin() + ParamsToSkip,
|
||||
E = CallArgTypeInfo->param_type_end();
|
||||
I != E; ++I, ++Arg) {
|
||||
assert(Arg != ArgEnd && "Running over edge of argument list!");
|
||||
#ifndef NDEBUG
|
||||
QualType ArgType = *I;
|
||||
QualType ActualArgType = Arg->getType();
|
||||
if (ArgType->isPointerType() && ActualArgType->isPointerType()) {
|
||||
QualType ActualBaseType =
|
||||
ActualArgType->getAs<PointerType>()->getPointeeType();
|
||||
QualType ArgBaseType =
|
||||
ArgType->getAs<PointerType>()->getPointeeType();
|
||||
if (ArgBaseType->isVariableArrayType()) {
|
||||
if (const VariableArrayType *VAT =
|
||||
getContext().getAsVariableArrayType(ActualBaseType)) {
|
||||
if (!VAT->getSizeExpr())
|
||||
ActualArgType = ArgType;
|
||||
QualType ArgType = *I;
|
||||
QualType ActualArgType = Arg->getType();
|
||||
if (ArgType->isPointerType() && ActualArgType->isPointerType()) {
|
||||
QualType ActualBaseType =
|
||||
ActualArgType->getAs<PointerType>()->getPointeeType();
|
||||
QualType ArgBaseType =
|
||||
ArgType->getAs<PointerType>()->getPointeeType();
|
||||
if (ArgBaseType->isVariableArrayType()) {
|
||||
if (const VariableArrayType *VAT =
|
||||
getContext().getAsVariableArrayType(ActualBaseType)) {
|
||||
if (!VAT->getSizeExpr())
|
||||
ActualArgType = ArgType;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
assert(getContext().getCanonicalType(ArgType.getNonReferenceType()).
|
||||
getTypePtr() ==
|
||||
getContext().getCanonicalType(ActualArgType).getTypePtr() &&
|
||||
"type mismatch in call argument!");
|
||||
assert(getContext()
|
||||
.getCanonicalType(ArgType.getNonReferenceType())
|
||||
.getTypePtr() ==
|
||||
getContext().getCanonicalType(ActualArgType).getTypePtr() &&
|
||||
"type mismatch in call argument!");
|
||||
#endif
|
||||
ArgTypes.push_back(*I);
|
||||
ArgTypes.push_back(*I);
|
||||
}
|
||||
}
|
||||
|
||||
// Either we've emitted all the call args, or we have a call to variadic
|
||||
// function or some other call that allows extra arguments.
|
||||
assert((Arg == ArgEnd || AllowExtraArguments) &&
|
||||
"Extra arguments in non-variadic function!");
|
||||
// function.
|
||||
assert(
|
||||
(Arg == ArgEnd || !CallArgTypeInfo || CallArgTypeInfo->isVariadic()) &&
|
||||
"Extra arguments in non-variadic function!");
|
||||
|
||||
// If we still have any arguments, emit them using the type of the argument.
|
||||
for (; Arg != ArgEnd; ++Arg)
|
||||
|
|
Loading…
Reference in New Issue