On Wed, Jul 3, 2024 at 8:18 AM Peter Damianov <peter0...@disroot.org> wrote:
>
> Currently, if a warning references a cloned function, the name of the cloned
> function will be emitted in the "In function 'xyz'" part of the diagnostic,
> which users aren't supposed to see. This patch follows the 
> DECL_ABSTRACT_ORIGIN
> links until encountering the original function.
>
> gcc/ChangeLog:
>         PR diagnostics/102061
>         * langhooks.cc (lhd_decl_printable_name): Follow DECL_ABSTRACT_ORIGIN
>         links to the source
>
> Signed-off-by: Peter Damianov <peter0...@disroot.org>
> ---
>
> I would add a testcase but I'm not familiar with that process, and would need
> some help. I also did not bootstrap or test this patch, I'm posting to see if
> the CI will do it for me.
>
> I used "while" because I'm not sure if there can be clones of clones or not.
> The second check is because I see comments elsewhere that say:
> "DECL_ABSTRACT_ORIGIN can point to itself", so I want to avoid a potential
> infinite loop.
>
>  gcc/langhooks.cc | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/gcc/langhooks.cc b/gcc/langhooks.cc
> index 61f2b676256..89a89b74535 100644
> --- a/gcc/langhooks.cc
> +++ b/gcc/langhooks.cc
> @@ -223,6 +223,8 @@ lhd_get_alias_set (tree ARG_UNUSED (t))
>  const char *
>  lhd_decl_printable_name (tree decl, int ARG_UNUSED (verbosity))
>  {
> +  while (DECL_ABSTRACT_ORIGIN(decl) && DECL_ABSTRACT_ORIGIN(decl) != decl)
> +    decl = DECL_ABSTRACT_ORIGIN(decl);

DECL_ABSTRACT_ORIGIN is maintained to point to the original function, there's
no need to "iterate" here.  You should be able to do

     decl = DECL_ORIGIN (decl);

>    gcc_assert (decl && DECL_NAME (decl));
>    return IDENTIFIER_POINTER (DECL_NAME (decl));
>  }
> --
> 2.39.2
>

Reply via email to