> Am 14.04.2025 um 17:47 schrieb Jakub Jelinek <ja...@redhat.com>:
> 
> Hi!
> 
> Andrew P. mentioned earlier he'd like to see in the dump files a note
> whether it was a failed must tail call or not.
> We already print that on the tailc/musttail pass side, because
> print_gimple_stmt prints [must tail call] after the musttail calls.
> The first hunk below does it for GENERIC CALL_EXPRs too (which is needed
> for the expand diagnostics).  That isn't enough though, because the
> error on it was done first and then CALL_EXPR_MUST_TAIL_CALL flag was
> cleared, so the dump didn't have it anymore.  I've reordered the
> dump printing with error, so that it works properly.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

Ok

Richard 

> 2025-04-14  Jakub Jelinek  <ja...@redhat.com>
> 
>    PR tree-optimization/119718
>    * tree-pretty-print.cc (dump_generic_node) <case CALL_EXPR>: Dump
>    also CALL_EXPR_MUST_TAIL_CALL flag.
>    * calls.cc (maybe_complain_about_tail_call): Emit error about
>    CALL_EXPR_MUST_TAIL_CALL only after emitting dump message, not before
>    it.
> 
> --- gcc/tree-pretty-print.cc.jj    2025-04-12 13:09:55.367024475 +0200
> +++ gcc/tree-pretty-print.cc    2025-04-14 08:58:21.480256810 +0200
> @@ -3201,6 +3201,8 @@ dump_generic_node (pretty_printer *pp, t
>    pp_string (pp, " [return slot optimization]");
>       if (CALL_EXPR_TAILCALL (node))
>    pp_string (pp, " [tail call]");
> +      if (CALL_EXPR_MUST_TAIL_CALL (node))
> +    pp_string (pp, " [must tail call]");
>       break;
> 
>     case WITH_CLEANUP_EXPR:
> --- gcc/calls.cc.jj    2025-04-12 13:12:53.788557966 +0200
> +++ gcc/calls.cc    2025-04-14 09:00:00.939905377 +0200
> @@ -1273,11 +1273,6 @@ void
> maybe_complain_about_tail_call (tree call_expr, const char *reason)
> {
>   gcc_assert (TREE_CODE (call_expr) == CALL_EXPR);
> -  if (CALL_EXPR_MUST_TAIL_CALL (call_expr))
> -    {
> -      error_at (EXPR_LOCATION (call_expr), "cannot tail-call: %s", reason);
> -      CALL_EXPR_MUST_TAIL_CALL (call_expr) = 0;
> -    }
>   if (CALL_EXPR_TAILCALL (call_expr)
>       && dump_file
>       && (dump_flags & TDF_DETAILS))
> @@ -1286,6 +1281,11 @@ maybe_complain_about_tail_call (tree cal
>       print_generic_expr (dump_file, call_expr, TDF_SLIM);
>       fprintf (dump_file, "\n");
>     }
> +  if (CALL_EXPR_MUST_TAIL_CALL (call_expr))
> +    {
> +      error_at (EXPR_LOCATION (call_expr), "cannot tail-call: %s", reason);
> +      CALL_EXPR_MUST_TAIL_CALL (call_expr) = 0;
> +    }
> }
> 
> /* Fill in ARGS_SIZE and ARGS array based on the parameters found in
> 
>    Jakub
> 

Reply via email to