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 >