optrecord_json_writer::optinfo_to_json can in theory be called from any
optimization pass, but currently uses get_fnname_from_decl, which
is RTL-specific, which can lead to an ICE (PR middle-end/89725).

In that PR, Jakub suggested using either DECL_ASSEMBLER_NAME or the
"printable name" (via current_function_name).

This patch makes it use DECL_ASSEMBLER_NAME.

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.

OK for trunk?

gcc/ChangeLog:
        PR middle-end/89725
        * optinfo-emit-json.cc (optrecord_json_writer::optinfo_to_json):
        Use DECL_ASSEMBLER_NAME rather than get_fnname_from_decl.
---
 gcc/optinfo-emit-json.cc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gcc/optinfo-emit-json.cc b/gcc/optinfo-emit-json.cc
index 814446b..1cfcdfe 100644
--- a/gcc/optinfo-emit-json.cc
+++ b/gcc/optinfo-emit-json.cc
@@ -411,7 +411,8 @@ optrecord_json_writer::optinfo_to_json (const optinfo 
*optinfo)
 
   if (current_function_decl)
     {
-      const char *fnname = get_fnname_from_decl (current_function_decl);
+      const char *fnname
+       = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl));
       obj->set ("function", new json::string (fnname));
     }
 
-- 
1.8.5.3

Reply via email to