From: David Majnemer Date: Sat, 3 Jan 2015 19:41:00 +0000 (+0000) Subject: Parse: __attribute__((keyword)) shouldn't error X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2e4bd4b5972c1a4b557b552592ff314c6b13c994;p=clang Parse: __attribute__((keyword)) shouldn't error Weird constructs like __attribute__((inline)) or __attibute__((typename)) should result in warnings, not errors. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225118 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index c0c0d59c7c..7ff39aabeb 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -143,11 +143,12 @@ void Parser::ParseGNUAttributes(ParsedAttributes &attrs, continue; // Expect an identifier or declaration specifier (const, int, etc.) - if (Tok.isNot(tok::identifier) && !isTypeQualifier() && - !isKnownToBeTypeSpecifier(Tok)) + if (Tok.isAnnotation()) break; - IdentifierInfo *AttrName = Tok.getIdentifierInfo(); + if (!AttrName) + break; + SourceLocation AttrNameLoc = ConsumeToken(); if (Tok.isNot(tok::l_paren)) { diff --git a/test/Parser/cxx-attributes.cpp b/test/Parser/cxx-attributes.cpp index 8cba5bc2a1..6591532a91 100644 --- a/test/Parser/cxx-attributes.cpp +++ b/test/Parser/cxx-attributes.cpp @@ -21,4 +21,4 @@ namespace PR17666 { typedef int __attribute__((aligned(int))) T2; // expected-error {{expected '(' for function-style cast}} } -__attribute((typename)) int x; // expected-error {{expected ')'}} +__attribute((typename)) int x; // expected-warning {{unknown attribute 'typename' ignored}} diff --git a/test/Parser/namespace-alias-attr.cpp b/test/Parser/namespace-alias-attr.cpp index 141a96c5eb..0baba8493d 100644 --- a/test/Parser/namespace-alias-attr.cpp +++ b/test/Parser/namespace-alias-attr.cpp @@ -4,5 +4,5 @@ namespace A { } -namespace B __attribute__ (( const )) = A; // expected-error{{attributes cannot be specified on namespace alias}} +namespace B __attribute__ (( static )) = A; // expected-error{{attributes cannot be specified on namespace alias}}