diff options
author | Nico Weber <nicolasweber@gmx.de> | 2013-04-04 00:15:10 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2013-04-04 00:15:10 +0000 |
commit | e145bfd06c7eaf0cff0f7d825d1c6244127c26df (patch) | |
tree | f5dbff175708cb1572f5608e928dd9e332458d44 /lib/Parse/ParseObjc.cpp | |
parent | d1cc514a6ac03f34de0aa5a4f4010d21d650d8f9 (diff) | |
download | clang-e145bfd06c7eaf0cff0f7d825d1c6244127c26df.tar.gz clang-e145bfd06c7eaf0cff0f7d825d1c6244127c26df.tar.bz2 clang-e145bfd06c7eaf0cff0f7d825d1c6244127c26df.tar.xz |
Make the ObjC attributes diagnostics a bit more informative.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178720 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseObjc.cpp')
-rw-r--r-- | lib/Parse/ParseObjc.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index 844a3d12e9..ad95dd5821 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -23,10 +23,14 @@ using namespace clang; /// Skips attributes after an Objective-C @ directive. Emits a diagnostic. -void Parser::MaybeSkipAttributes() { +void Parser::MaybeSkipAttributes(tok::ObjCKeywordKind Kind) { ParsedAttributes attrs(AttrFactory); if (Tok.is(tok::kw___attribute)) { - Diag(Tok, diag::err_objc_postfix_attribute); + if (Kind == tok::objc_interface || Kind == tok::objc_protocol) + Diag(Tok, diag::err_objc_postfix_attribute_hint) + << (Kind == tok::objc_protocol); + else + Diag(Tok, diag::err_objc_postfix_attribute); ParseGNUAttributes(attrs); } } @@ -101,7 +105,7 @@ Parser::ParseObjCAtClassDeclaration(SourceLocation atLoc) { while (1) { - MaybeSkipAttributes(); + MaybeSkipAttributes(tok::objc_class); if (Tok.isNot(tok::identifier)) { Diag(Tok, diag::err_expected_ident); SkipUntil(tok::semi); @@ -188,7 +192,7 @@ Decl *Parser::ParseObjCAtInterfaceDeclaration(SourceLocation AtLoc, return 0; } - MaybeSkipAttributes(); + MaybeSkipAttributes(tok::objc_interface); if (Tok.isNot(tok::identifier)) { Diag(Tok, diag::err_expected_ident); // missing class or category name. @@ -1408,7 +1412,7 @@ Parser::ParseObjCAtProtocolDeclaration(SourceLocation AtLoc, return DeclGroupPtrTy(); } - MaybeSkipAttributes(); + MaybeSkipAttributes(tok::objc_protocol); if (Tok.isNot(tok::identifier)) { Diag(Tok, diag::err_expected_ident); // missing protocol name. @@ -1501,7 +1505,7 @@ Parser::ParseObjCAtImplementationDeclaration(SourceLocation AtLoc) { return DeclGroupPtrTy(); } - MaybeSkipAttributes(); + MaybeSkipAttributes(tok::objc_implementation); if (Tok.isNot(tok::identifier)) { Diag(Tok, diag::err_expected_ident); // missing class or category name. |