]> granicus.if.org Git - clang/commitdiff
Objective-C parsing [qoi]: Provide good recovery when
authorFariborz Jahanian <fjahanian@apple.com>
Thu, 18 Apr 2013 19:37:43 +0000 (19:37 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Thu, 18 Apr 2013 19:37:43 +0000 (19:37 +0000)
Objective-C dictionary literals has bad syntax for the
separator. // rdar://10679157

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179784 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/ParseObjc.cpp
test/Parser/objc-boxing.m

index ad95dd5821ceadb2676e0a20e51a0bb6b774d0c7..4adba4f5c5539cdd9c8cadc74f4485bb10183096 100644 (file)
@@ -2747,7 +2747,9 @@ ExprResult Parser::ParseObjCDictionaryLiteral(SourceLocation AtLoc) {
     if (Tok.is(tok::colon)) {
       ConsumeToken();
     } else {
-      return ExprError(Diag(Tok, diag::err_expected_colon));
+      Diag(Tok, diag::err_expected_colon);
+      SkipUntil(tok::r_brace);
+      return ExprError();
     }
     
     ExprResult ValueExpr(ParseAssignmentExpression());
index a16a137b8f65a42a9216c2cfabbb6e83a98867bf..a6bb0243cf0e4275dfef47d7a5a98768fdada1ae 100644 (file)
@@ -24,3 +24,11 @@ id missing_parentheses() {
     return @(5;             // expected-error {{expected ')'}} \
                             // expected-note {{to match this '('}}
 }
+
+// rdar://10679157
+void bar(id p);
+void foo(id p) {
+        bar(@{p, p}); // expected-error {{expected ':'}}
+        bar(0);
+        bar(0);
+}