From: Fariborz Jahanian Date: Wed, 23 Feb 2011 00:11:21 +0000 (+0000) Subject: Better parser recovery when method is X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=55edca9d7d6a50cbda6f036b05a0cb8d42f5a010;p=clang Better parser recovery when method is 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 --- diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp index a50763a0e3..3e1574c33d 100644 --- a/lib/Parse/Parser.cpp +++ b/lib/Parse/Parser.cpp @@ -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 index 0000000000..490c0559d1 --- /dev/null +++ b/test/Parser/method-def-in-class.m @@ -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