On Wed, Jul 3, 2024 at 8:18 AM Peter Damianov <[email protected]> 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 <[email protected]>
> ---
>
> 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
>