Finish up variadic methods/messages.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44172 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Parse/ParseObjc.cpp b/Parse/ParseObjc.cpp
index be33f86..bc4bcbe 100644
--- a/Parse/ParseObjc.cpp
+++ b/Parse/ParseObjc.cpp
@@ -1291,9 +1291,15 @@
}
// Parse the, optional, argument list, comma separated.
while (Tok.is(tok::comma)) {
- ConsumeToken();
- /// Parse the expression after ','
- ParseAssignmentExpression();
+ ConsumeToken(); // Eat the ','.
+ /// Parse the expression after ','
+ ExprResult Res = ParseAssignmentExpression();
+ if (Res.isInvalid) {
+ SkipUntil(tok::identifier);
+ return Res;
+ }
+ // We have a valid expression.
+ KeyExprs.push_back(Res.Val);
}
} else if (!selIdent) {
Diag(Tok, diag::err_expected_ident); // missing selector name.
@@ -1317,9 +1323,9 @@
if (ReceiverName)
return Actions.ActOnClassMessage(CurScope,
ReceiverName, Sel, LBracloc, RBracloc,
- &KeyExprs[0]);
+ &KeyExprs[0], KeyExprs.size());
return Actions.ActOnInstanceMessage(ReceiverExpr, Sel, LBracloc, RBracloc,
- &KeyExprs[0]);
+ &KeyExprs[0], KeyExprs.size());
}
Parser::ExprResult Parser::ParseObjCStringLiteral(SourceLocation AtLoc) {