]> granicus.if.org Git - clang/commitdiff
Better parser recovery when method is
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 23 Feb 2011 00:11:21 +0000 (00:11 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 23 Feb 2011 00:11:21 +0000 (00:11 +0000)
errornously defined inside an objc class.
// rdar://7029784

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

lib/Parse/Parser.cpp
test/Parser/method-def-in-class.m [new file with mode: 0644]

index a50763a0e38e146dbdccbe8b2bc4bb62fd505613..3e1574c33d333a97aa96a8ab1f46cce693dd65d3 100644 (file)
@@ -296,6 +296,10 @@ bool Parser::SkipUntil(const tok::TokenKind *Toks, unsigned NumToks,
     case tok::wide_string_literal:
       ConsumeStringToken();
       break;
+        
+    case tok::at:
+      return false;
+      
     case tok::semi:
       if (StopAtSemi)
         return false;
diff --git a/test/Parser/method-def-in-class.m b/test/Parser/method-def-in-class.m
new file mode 100644 (file)
index 0000000..490c055
--- /dev/null
@@ -0,0 +1,25 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+// rdar://7029784
+
+@interface A
+-(id) f0 { // expected-error {{expected ';' after method prototype}}
+  assert(0);
+}
+@end
+
+@interface B
+-(id) f0 { // expected-error {{expected ';' after method prototype}}
+  assert(0);
+@end
+
+@interface C
+- (id) f0 { // expected-error {{expected ';' after method prototype}}
+    assert(0);
+};
+@end
+
+@interface D
+- (id) f0 { // expected-error {{expected ';' after method prototype}}
+  assert(0);
+@property int P;
+@end