Fix rejects-valid when forming a pointer-to-member with 'decltype(expr)::*'.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 2 Feb 2016 23:34:49 +0000 (23:34 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 2 Feb 2016 23:34:49 +0000 (23:34 +0000)
llvm-svn: 259604

clang/lib/Parse/ParseDecl.cpp
clang/test/Parser/cxx0x-decl.cpp

index 49b5931..3097d28 100644 (file)
@@ -4931,7 +4931,7 @@ void Parser::ParseDeclaratorInternal(Declarator &D,
   // Member pointers get special handling, since there's no place for the
   // scope spec in the generic path below.
   if (getLangOpts().CPlusPlus &&
-      (Tok.is(tok::coloncolon) ||
+      (Tok.is(tok::coloncolon) || Tok.is(tok::kw_decltype) ||
        (Tok.is(tok::identifier) &&
         (NextToken().is(tok::coloncolon) || NextToken().is(tok::less))) ||
        Tok.is(tok::annot_cxxscope))) {
index 23f46a1..c4f0356 100644 (file)
@@ -17,6 +17,8 @@ auto g() -> enum E {
   return E();
 }
 
+int decltype(f())::*ptr_mem_decltype;
+
 class ExtraSemiAfterMemFn {
   // Due to a peculiarity in the C++11 grammar, a deleted or defaulted function
   // is permitted to be followed by either one or two semicolons.