summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaOverload.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Sema/SemaOverload.cpp')
-rw-r--r--clang/lib/Sema/SemaOverload.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 0a12a71bb74..875a38253da 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -4178,11 +4178,13 @@ Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object,
else if (NumArgs > NumArgsInProto)
NumArgsToCheck = NumArgsInProto;
+ bool IsError = false;
+
// Initialize the implicit object parameter.
- if (PerformObjectArgumentInitialization(Object, Method))
- return true;
+ IsError |= PerformObjectArgumentInitialization(Object, Method);
TheCall->setArg(0, Object);
+
// Check the argument types.
for (unsigned i = 0; i != NumArgsToCheck; i++) {
Expr *Arg;
@@ -4191,8 +4193,7 @@ Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object,
// Pass the argument.
QualType ProtoArgType = Proto->getArgType(i);
- if (PerformCopyInitialization(Arg, ProtoArgType, "passing"))
- return true;
+ IsError |= PerformCopyInitialization(Arg, ProtoArgType, "passing");
} else {
Arg = new (Context) CXXDefaultArgExpr(Method->getParamDecl(i));
}
@@ -4205,12 +4206,13 @@ Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object,
// Promote the arguments (C99 6.5.2.2p7).
for (unsigned i = NumArgsInProto; i != NumArgs; i++) {
Expr *Arg = Args[i];
-
- DefaultVariadicArgumentPromotion(Arg, VariadicMethod);
+ IsError |= DefaultVariadicArgumentPromotion(Arg, VariadicMethod);
TheCall->setArg(i + 1, Arg);
}
}
+ if (IsError) return true;
+
return CheckFunctionCall(Method, TheCall.take()).release();
}
OpenPOWER on IntegriCloud