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) {