On Mon, Jun 03, 2024 at 10:42:20AM -0400, Jason Merrill wrote: > > @@ -30316,7 +30348,7 @@ cp_parser_std_attribute (cp_parser *parser, tree > > attr_ns) > > /* Maybe we don't expect to see any arguments for this attribute. */ > > const attribute_spec *as > > = lookup_attribute_spec (TREE_PURPOSE (attribute)); > > - if (as && as->max_length == 0) > > + if ((as && as->max_length == 0) || is_attribute_p ("musttail", > > attr_id)) > > This shouldn't be necessary with the attribute in the c-attribs table, > right? This patch is OK without this hunk and with the comment tweak above.
Yes I will remove it. Also the hunk above can be simplified, we don't need the extra case anymore. But unfortunately there's another problem (sorry I missed that earlier but the Linaro bot pointed it out again): This hunk: @@ -21085,12 +21085,14 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl) bool op = CALL_EXPR_OPERATOR_SYNTAX (t); bool ord = CALL_EXPR_ORDERED_ARGS (t); bool rev = CALL_EXPR_REVERSE_ARGS (t); - if (op || ord || rev) + bool mtc = CALL_EXPR_MUST_TAIL_CALL (t); + if (op || ord || rev || mtc) if (tree call = extract_call_expr (ret)) { CALL_EXPR_OPERATOR_SYNTAX (call) = op; CALL_EXPR_ORDERED_ARGS (call) = ord; CALL_EXPR_REVERSE_ARGS (call) = rev; + CALL_EXPR_MUST_TAIL_CALL (call) = mtc; } if (warning_suppressed_p (t, OPT_Wpessimizing_move)) /* This also suppresses -Wredundant-move. */ causes /home/ak/gcc/gcc/gcc/testsuite/g++.dg/ipa/devirt-52.C:49:8: internal compiler error: tree check: expected call_expr, have aggr_init_expr in tsubst_expr, at cp/pt.cc:21095 0x910b66 tree_check_failed(tree_node const*, char const*, int, char const*, ...) ../../gcc/gcc/tree.cc:8995 I suspect that's because CALL_EXPR_MUST_TAIL_CALL uses tree_core->static_flag, but that means something else during template expansion? Any suggestions how to fix that? -Andi