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