summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-04-14 17:21:19 +0000
committerDouglas Gregor <dgregor@apple.com>2011-04-14 17:21:19 +0000
commit23c84767484c846fa08812bd251a298095ab6afa (patch)
treeb91d028ac45540b6d2746d82416e84fe48e45316 /clang/lib
parent866d73c7b41c97326f19757f4559a0b2479bb1af (diff)
downloadbcm5719-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.cpp11
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)) &&
OpenPOWER on IntegriCloud