aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2022-01-17 17:16:38 -0500
committerJason Merrill <jason@redhat.com>2022-01-18 17:57:04 -0500
commit2aa184458a11a7ec8c1b451b8eeff458a24632bb (patch)
tree3165fe033d2c22b5a213d31fa3bb2f024979588b /gcc/cp
parent7db42268ce4bc77bc13f13ba0899221747255bb5 (diff)
downloadgcc-2aa184458a11a7ec8c1b451b8eeff458a24632bb.zip
gcc-2aa184458a11a7ec8c1b451b8eeff458a24632bb.tar.gz
gcc-2aa184458a11a7ec8c1b451b8eeff458a24632bb.tar.bz2
c++: input_location and lookahead [PR104025]
Debug information was getting confused because input_location was different depending on whether we had looked ahead to see if the next tokens look like a template argument list. I tried resetting input_location in cp_lexer_rollback_tokens itself, but that caused regressions, so let's just do it here for now. PR c++/104025 gcc/cp/ChangeLog: * parser.cc (saved_token_sentinel::rollback): Call cp_lexer_set_source_position. (~saved_token_sentinel): Call rollback. gcc/testsuite/ChangeLog: * g++.dg/warn/pr104025.C: New test. Co-authored-by: Jakub Jelinek <jakub@redhat.com>
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/parser.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index b262b76..60d9f7b 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -1308,6 +1308,7 @@ struct saved_token_sentinel
void rollback ()
{
cp_lexer_rollback_tokens (lexer);
+ cp_lexer_set_source_position (lexer);
mode = STS_DONOTHING;
}
~saved_token_sentinel ()
@@ -1315,7 +1316,7 @@ struct saved_token_sentinel
if (mode == STS_COMMIT)
cp_lexer_commit_tokens (lexer);
else if (mode == STS_ROLLBACK)
- cp_lexer_rollback_tokens (lexer);
+ rollback ();
gcc_assert (lexer->saved_tokens.length () == len);
}