aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Parse/ParseExprCXX.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-02-08 19:58:48 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-02-08 19:58:48 +0000
commit3f846bd9fee78ea8f16b8e90ffcacfcce205a19d (patch)
treef46c190a6b1f66e81ef359e37933479fdbbb3708 /clang/lib/Parse/ParseExprCXX.cpp
parent0674fe39e5a9e4db5bbbb7389c8cb16705de7e07 (diff)
downloadllvm-3f846bd9fee78ea8f16b8e90ffcacfcce205a19d.zip
llvm-3f846bd9fee78ea8f16b8e90ffcacfcce205a19d.tar.gz
llvm-3f846bd9fee78ea8f16b8e90ffcacfcce205a19d.tar.bz2
Don't crash on 'decltype(auto)::'. Rather than treating it as a meaningless
nested-name-specifier (as the standard appears to require), treat it as the type specifier 'decltype(auto)' followed by a nested-name-specifier starting with '::'. llvm-svn: 294506
Diffstat (limited to 'clang/lib/Parse/ParseExprCXX.cpp')
-rw-r--r--clang/lib/Parse/ParseExprCXX.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp
index 1ba16958..cb42a88 100644
--- a/clang/lib/Parse/ParseExprCXX.cpp
+++ b/clang/lib/Parse/ParseExprCXX.cpp
@@ -216,7 +216,10 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
SourceLocation EndLoc = ParseDecltypeSpecifier(DS);
SourceLocation CCLoc;
- if (!TryConsumeToken(tok::coloncolon, CCLoc)) {
+ // Work around a standard defect: 'decltype(auto)::' is not a
+ // nested-name-specifier.
+ if (DS.getTypeSpecType() == DeclSpec::TST_decltype_auto ||
+ !TryConsumeToken(tok::coloncolon, CCLoc)) {
AnnotateExistingDecltypeSpecifier(DS, DeclLoc, EndLoc);
return false;
}