From 19bd90282641da569f3da6c26eac3fd248296cb2 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 16 Jul 2019 04:49:04 -0400 Subject: [PATCH] Fix g++.dg/template/pr84789.C on new concepts branch. 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 | 5 +++++ gcc/cp/parser.c | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a18959d6388..bd85c705629 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2019-07-16 Jason Merrill + + * 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 * parser.c (cp_parser_omp_clause_name): Handle order clause. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index f91c50ead67..14a2168eb6d 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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); -- 2.30.2