diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-12-28 22:28:32 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-12-28 22:28:32 +0000 |
commit | 06039218f5ef078b7a815a68d2f9eca44658d7f0 (patch) | |
tree | db51e2aaef185c11d0f646c1e8ca410a95b114b1 /clang/lib/Parse/ParseDecl.cpp | |
parent | 3087a2b949d7e952c1aecfd6579b40908380851b (diff) | |
download | bcm5719-llvm-06039218f5ef078b7a815a68d2f9eca44658d7f0.tar.gz bcm5719-llvm-06039218f5ef078b7a815a68d2f9eca44658d7f0.zip |
Parse: Don't crash when 'typename' shows up in an attribute
isDeclarationSpecifier performs error recovers which jostles the token
stream. Specifically, TryAnnotateTypeOrScopeToken will end up consuming
a typename token which will confuse the attribute parsing machinery as
we no-longer have something identifier-like.
llvm-svn: 224903
Diffstat (limited to 'clang/lib/Parse/ParseDecl.cpp')
-rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 64665fc2871..c0c0d59c7c4 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -143,7 +143,8 @@ void Parser::ParseGNUAttributes(ParsedAttributes &attrs, continue; // Expect an identifier or declaration specifier (const, int, etc.) - if (Tok.isNot(tok::identifier) && !isDeclarationSpecifier()) + if (Tok.isNot(tok::identifier) && !isTypeQualifier() && + !isKnownToBeTypeSpecifier(Tok)) break; IdentifierInfo *AttrName = Tok.getIdentifierInfo(); |