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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|jakub at redhat dot com     |jan.kratochvil at redhat
                   |                            |dot com

--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-03-16 
17:03:58 UTC ---
I believe it is a LTO speciality, I can't imagine how non-lto would end up with
DECL_EXTERNAL with DECL_ABSTRACT_ORIGIN set, so I guess your patch is an
alternative.

Or:
--- dwarf2out.c.jj      2011-03-16 09:37:40.000000000 +0100
+++ dwarf2out.c 2011-03-16 17:28:36.054796163 +0100
@@ -22927,7 +22927,9 @@ resolve_addr (dw_die_ref die)
          {
            tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
            dw_die_ref tdie = lookup_decl_die (tdecl);
-           if (tdie == NULL && DECL_EXTERNAL (tdecl))
+           if (tdie == NULL
+               && DECL_EXTERNAL (tdecl)
+               && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE)
              {
                force_decl_die (tdecl);
                tdie = lookup_decl_die (tdecl);

that I'm testing right now.  DW_TAG_GNU_call_site won't be very useful in that
case anyway, because if the extern is "read_string.constprop.0" with that
DW_AT_name, I bet the debugger won't be able to match it to the definition DIE
anyway.  I think currently for read_string.constprop.0 in the definition CU we
will just have
DW_TAG_subprogram
  DW_AT_abstract_origin <read_string DIE>
and not any DW_AT_name (which is thought to be the same as abstract origin's
name, correct for the clones) and no DW_AT_linkage_name (guess it would be
desirable to provide a linkage name if the clone has a different name from the
origin).

Reply via email to