From: David Majnemer Date: Fri, 9 Jan 2015 18:09:39 +0000 (+0000) Subject: Parse: Don't crash when an annotation token shows up in a C++11 attr X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ad1cfd9132b6e901894033bca777f456c822af39;p=clang Parse: Don't crash when an annotation token shows up in a C++11 attr It's not safe to blindly call getIdentifierInfo without checking the token is not an annotation token. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225533 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp index 1c38979fae..10568b3671 100644 --- a/lib/Parse/ParseDeclCXX.cpp +++ b/lib/Parse/ParseDeclCXX.cpp @@ -3386,9 +3386,11 @@ IdentifierInfo *Parser::TryParseCXX11AttributeIdentifier(SourceLocation &Loc) { switch (Tok.getKind()) { default: // Identifiers and keywords have identifier info attached. - if (IdentifierInfo *II = Tok.getIdentifierInfo()) { - Loc = ConsumeToken(); - return II; + if (!Tok.isAnnotation()) { + if (IdentifierInfo *II = Tok.getIdentifierInfo()) { + Loc = ConsumeToken(); + return II; + } } return nullptr; diff --git a/test/Parser/cxx0x-attributes.cpp b/test/Parser/cxx0x-attributes.cpp index 9dbefb0f48..c68a119fc7 100644 --- a/test/Parser/cxx0x-attributes.cpp +++ b/test/Parser/cxx0x-attributes.cpp @@ -334,3 +334,10 @@ namespace { [[deprecated()]] void foo(); // expected-error {{parentheses must be omitted if 'deprecated' attribute's argument list is empty}} [[gnu::deprecated()]] void quux(); } + +namespace { +[[ // expected-error {{expected ']'}} +#pragma pack(pop) +deprecated +]] void bad(); +}