diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-11-18 19:45:45 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-11-18 19:45:45 +0000 |
commit | b328c4251a9d2db704b3bd46ec04884dc8e56332 (patch) | |
tree | c83b7fa44000e5df7a0022da1ee4d7f2dca7bff4 /lib/Parse/ParseObjc.cpp | |
parent | 832b710f597d7d02bcfc83f7c1c1726209f28c50 (diff) |
Improve diagnostics and recovery when parsing @synthesized definitions
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89227 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseObjc.cpp')
-rw-r--r-- | lib/Parse/ParseObjc.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index e1f045bd8e..8d6fd209c6 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -1236,7 +1236,13 @@ Parser::DeclPtrTy Parser::ParseObjCPropertySynthesize(SourceLocation atLoc) { return DeclPtrTy(); } - while (Tok.is(tok::identifier)) { + while (true) { + if (Tok.isNot(tok::identifier)) { + Diag(Tok, diag::err_synthesized_property_name); + SkipUntil(tok::semi); + return DeclPtrTy(); + } + IdentifierInfo *propertyIvar = 0; IdentifierInfo *propertyId = Tok.getIdentifierInfo(); SourceLocation propertyLoc = ConsumeToken(); // consume property name @@ -1256,8 +1262,10 @@ Parser::DeclPtrTy Parser::ParseObjCPropertySynthesize(SourceLocation atLoc) { break; ConsumeToken(); // consume ',' } - if (Tok.isNot(tok::semi)) + if (Tok.isNot(tok::semi)) { Diag(Tok, diag::err_expected_semi_after) << "@synthesize"; + SkipUntil(tok::semi); + } else ConsumeToken(); // consume ';' return DeclPtrTy(); |