diff options
author | David Blaikie <dblaikie@gmail.com> | 2011-10-25 18:17:58 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2011-10-25 18:17:58 +0000 |
commit | afa155fb8879f77c40a73360b1215b65d7501aa9 (patch) | |
tree | c8b5c387de5f4c60bc24b3bf73ff1f38a9688534 /clang/lib | |
parent | 82b077ec225fe832300031f5450d2ee647ebc41d (diff) | |
download | bcm5719-llvm-afa155fb8879f77c40a73360b1215b65d7501aa9.tar.gz bcm5719-llvm-afa155fb8879f77c40a73360b1215b65d7501aa9.zip |
Fix erroneous name-specifiers prior to decltypes better/correctly as per Doug's feedback.
llvm-svn: 142935
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index bdd41a27dfe..8530ff2740a 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -713,13 +713,20 @@ void Parser::ParseUnderlyingTypeSpecifier(DeclSpec &DS) { /// Parser::TypeResult Parser::ParseBaseTypeSpecifier(SourceLocation &BaseLoc, SourceLocation &EndLocation) { + // Parse optional nested-name-specifier + CXXScopeSpec SS; + ParseOptionalCXXScopeSpecifier(SS, ParsedType(), /*EnteringContext=*/false); + + BaseLoc = Tok.getLocation(); + // Parse decltype-specifier if (Tok.is(tok::kw_decltype)) { + if (SS.isNotEmpty()) + Diag(SS.getBeginLoc(), diag::err_unexpected_scope_on_base_decltype) + << FixItHint::CreateRemoval(SS.getRange()); // Fake up a Declarator to use with ActOnTypeName. DeclSpec DS(AttrFactory); - BaseLoc = Tok.getLocation(); - ParseDecltypeSpecifier(DS); EndLocation = DS.getSourceRange().getEnd(); @@ -727,12 +734,6 @@ Parser::TypeResult Parser::ParseBaseTypeSpecifier(SourceLocation &BaseLoc, return Actions.ActOnTypeName(getCurScope(), DeclaratorInfo); } - // Parse optional nested-name-specifier - CXXScopeSpec SS; - ParseOptionalCXXScopeSpecifier(SS, ParsedType(), /*EnteringContext=*/false); - - BaseLoc = Tok.getLocation(); - // Check whether we have a template-id that names a type. if (Tok.is(tok::annot_template_id)) { TemplateIdAnnotation *TemplateId = takeTemplateIdAnnotation(Tok); |