r225533 - Parse: Don't crash when an annotation token shows up in a C++11 attr
Aaron Ballman
aaron at aaronballman.com
Fri Jan 9 10:18:40 PST 2015
Thank you for this, good catch!
~Aaron
On Fri, Jan 9, 2015 at 1:09 PM, David Majnemer <david.majnemer at gmail.com> wrote:
> Author: majnemer
> Date: Fri Jan 9 12:09:39 2015
> New Revision: 225533
>
> URL: http://llvm.org/viewvc/llvm-project?rev=225533&view=rev
> Log:
> 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.
>
> Modified:
> cfe/trunk/lib/Parse/ParseDeclCXX.cpp
> cfe/trunk/test/Parser/cxx0x-attributes.cpp
>
> Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDeclCXX.cpp?rev=225533&r1=225532&r2=225533&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseDeclCXX.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp Fri Jan 9 12:09:39 2015
> @@ -3386,9 +3386,11 @@ IdentifierInfo *Parser::TryParseCXX11Att
> 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;
>
>
> Modified: cfe/trunk/test/Parser/cxx0x-attributes.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/cxx0x-attributes.cpp?rev=225533&r1=225532&r2=225533&view=diff
> ==============================================================================
> --- cfe/trunk/test/Parser/cxx0x-attributes.cpp (original)
> +++ cfe/trunk/test/Parser/cxx0x-attributes.cpp Fri Jan 9 12:09:39 2015
> @@ -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();
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list