[Bug ipa/60761] [4.9 Regression] Names of all function clones in g++ are "<built-in>", in both warnings and dumps

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Apr 8 11:49:00 GMT 2014


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60761

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
4.8 prints

t.ii: In function ‘void _Z3fooi.constprop.0()’:
t.ii:14:8: warning: array subscript is above array bounds [-Warray-bounds]
     z[i] = i;
        ^

which isn't perfect either.  Is there a way for the C++ FE to get at the
original function decl that was cloned?  Like with

Index: gcc/cp/error.c
===================================================================
--- gcc/cp/error.c      (revision 209210)
+++ gcc/cp/error.c      (working copy)
@@ -34,6 +34,7 @@ along with GCC; see the file COPYING3.
 #include "pointer-set.h"
 #include "c-family/c-objc.h"
 #include "ubsan.h"
+#include "cgraph.h"

 #include <new>                    // For placement-new.

@@ -1145,7 +1146,17 @@ dump_decl (cxx_pretty_printer *pp, tree

     case FUNCTION_DECL:
       if (! DECL_LANG_SPECIFIC (t))
-       pp_string (pp, M_("<built-in>"));
+       {
+         cgraph_node *node;
+         if ((node = cgraph_get_node (t))
+             && node->former_clone_of)
+           {
+             dump_decl (pp, node->former_clone_of, flags);
+             pp_string (pp, M_(" <clone>"));
+           }
+         else
+           pp_string (pp, M_("<built-in>"));
+       }
       else if (DECL_GLOBAL_CTOR_P (t) || DECL_GLOBAL_DTOR_P (t))
        dump_global_iord (pp, t);
       else

which prints

t.ii: In function 'void foo(int) <clone>':
t.ii:14:13: warning: iteration 3u invokes undefined behavior
[-Waggressive-loop-optimizations]
     z[i] = i;
             ^
t.ii:13:3: note: containing loop
   for (int i = 0; i < s; i++)
   ^
t.ii:14:8: warning: array subscript is above array bounds [-Warray-bounds]
     z[i] = i;
        ^

does former_clone_of apply recursively?  Thus can we have a clone of a clone?
Is there a way to "pretty-print" the kind of clone?  That is, say
<clone with foo = 1> for a ipa-cp clone with parameter foo replaced by 1?


More information about the Gcc-bugs mailing list