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);
   gcc_assert (decl && DECL_NAME (decl));
   return IDENTIFIER_POINTER (DECL_NAME (decl));
 }
-- 
2.39.2

Reply via email to