summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseDecl.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-12-28 22:28:32 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-12-28 22:28:32 +0000
commit06039218f5ef078b7a815a68d2f9eca44658d7f0 (patch)
treedb51e2aaef185c11d0f646c1e8ca410a95b114b1 /clang/lib/Parse/ParseDecl.cpp
parent3087a2b949d7e952c1aecfd6579b40908380851b (diff)
downloadbcm5719-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.cpp3
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();
OpenPOWER on IntegriCloud