diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-04-14 17:21:19 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-04-14 17:21:19 +0000 |
commit | 23c84767484c846fa08812bd251a298095ab6afa (patch) | |
tree | b91d028ac45540b6d2746d82416e84fe48e45316 /clang/lib | |
parent | 866d73c7b41c97326f19757f4559a0b2479bb1af (diff) | |
download | bcm5719-llvm-23c84767484c846fa08812bd251a298095ab6afa.tar.gz bcm5719-llvm-23c84767484c846fa08812bd251a298095ab6afa.zip |
Parse an '@' in an Objective-C++ class member specification,
diagnosing it as an error rather than looping infinitely. Also,
explicitly disallow @defs in Objective-C++. Fixes <rdar://problem/9260136>.
llvm-svn: 129521
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index dac40d87139..9c0730dce9f 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -1374,6 +1374,17 @@ bool Parser::isCXX0XFinalKeyword() const { void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) { + if (Tok.is(tok::at)) { + if (getLang().ObjC1 && NextToken().isObjCAtKeyword(tok::objc_defs)) + Diag(Tok, diag::err_at_defs_cxx); + else + Diag(Tok, diag::err_at_in_class); + + ConsumeToken(); + SkipUntil(tok::r_brace); + return; + } + // Access declarations. if (!TemplateInfo.Kind && (Tok.is(tok::identifier) || Tok.is(tok::coloncolon)) && |