Fix g++.dg/template/pr84789.C on new concepts branch.
authorJason Merrill <jason@redhat.com>
Tue, 16 Jul 2019 08:49:04 +0000 (04:49 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 16 Jul 2019 08:49:04 +0000 (04:49 -0400)
On the concepts branch I ran into trouble where a pre-parsed dependent
nested-name-specifier got replaced on a subsequent parse with is_declaration
by one with typenames resolved, which was then used wrongly on a further
parse with !is_declaration.

    * parser.c (cp_parser_nested_name_specifier_opt): If the token is
    already CPP_NESTED_NAME_SPECIFIER, leave it alone.

From-SVN: r273513

gcc/cp/ChangeLog
gcc/cp/parser.c

index a18959d6388c6e6fd1f89663635003a2800b2111..bd85c705629cf0d5810ffdd711a8f8c8901f1f50 100644 (file)
@@ -1,3 +1,8 @@
+2019-07-16  Jason Merrill  <jason@redhat.com>
+
+       * parser.c (cp_parser_nested_name_specifier_opt): If the token is
+       already CPP_NESTED_NAME_SPECIFIER, leave it alone.
+
 2019-07-12  Jakub Jelinek  <jakub@redhat.com>
 
        * parser.c (cp_parser_omp_clause_name): Handle order clause.
index f91c50ead67649bebae2c9f74beedb9826b12e28..14a2168eb6d35b9865abf4b734408d5f49e16fc1 100644 (file)
@@ -6275,7 +6275,8 @@ cp_parser_nested_name_specifier_opt (cp_parser *parser,
   cp_token *token;
 
   /* Remember where the nested-name-specifier starts.  */
-  if (cp_parser_uncommitted_to_tentative_parse_p (parser))
+  if (cp_parser_uncommitted_to_tentative_parse_p (parser)
+      && cp_lexer_next_token_is_not (parser->lexer, CPP_NESTED_NAME_SPECIFIER))
     {
       start = cp_lexer_token_position (parser->lexer, false);
       push_deferring_access_checks (dk_deferred);