https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119954
mcccs at gmx dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |error-recovery
--- Comment #4 from mcccs at gmx dot com ---
In the commit which introduced this problem, this line looked like recursion to
me:
16037 if ((cxx_dialect > cxx17)
16038 && (TREE_CODE (templ) == FUNCTION_DECL || identifier_p
(templ))
16039 && !template_keyword_p
16040 && (cp_parser_error_occurred (parser)
16041 || cp_lexer_next_token_is_not (parser->lexer,
CPP_OPEN_PAREN)))
16042 {
16043 /* This didn't go well. */
16044 if (TREE_CODE (templ) == FUNCTION_DECL)
16045 {
16046 /* C++2A says that "function-name < a;" is now
ill-formed. */
16047 if (cp_parser_error_occurred (parser))
16048 {
16049 error_at (token->location, "invalid
template-argument-list");
16050 inform (token->location, "function name as the left
hand "
16051 "operand of %<<%> is ill-formed in C++2a;
wrap the "
16052 "function name in %<()%>");
16053 }
16054 else
16055 /* We expect "f<targs>" to be followed by "(args)". */
16056 error_at (cp_lexer_peek_token
(parser->lexer)->location,
16057 "expected %<(%> after
template-argument-list");
16058 if (start_of_id)
16059 /* Purge all subsequent tokens. */
16060 cp_lexer_purge_tokens_after (parser->lexer,
start_of_id);
16061 }
16062 else
16063 cp_parser_simulate_error (parser); <---------------------
16064 pop_deferring_access_checks ();
16065 return error_mark_node;
16066 }
so I replaced it with:
else {
error_at (token->location, "branch run");
cp_parser_simulate_error (parser);
}
and counted the number of times "branch run" was printed for each source:
// a < b: 8
// a < b < c: 96 (x12)
// a < b < c < d: 1104 (x11.5)
// a < b < c < d < e: 12672 (x11.4782608696)
// a < b < c < d < e < f: 145440 (x11.4772727273)
(This is a low priority issue, the only benefit would be to able to debug
pr118526 and protect online compilers from DoS)