https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91772

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
OK, so this happens when the DIE was not created early (due to -g1) then we do

      /* We may have to generate early debug late for LTO in case debug
         was not enabled at compile-time or the target doesn't support
         the LTO early debug scheme.  */
      if (! die && in_lto_p)
        {
          dwarf2out_decl (decl);
          die = lookup_decl_die (decl);
        }

where dwarf2out_decl already adds a DW_AT_location attribute.  Then
we fall through to

      if (die)
        {
          /* We get called via the symtab code invoking late_global_decl
             for symbols that are optimized out.

             Do not add locations for those, except if they have a
             DECL_VALUE_EXPR, in which case they are relevant for debuggers.
             Still don't add a location if the DECL_VALUE_EXPR is not a trivial
             INDIRECT_REF expression, as this could generate relocations to
             text symbols in LTO object files, which is invalid.  */
          varpool_node *node = varpool_node::get (decl);
          if ((! node || ! node->definition)
              && ! (DECL_HAS_VALUE_EXPR_P (decl)
                    && is_trivial_indirect_ref (DECL_VALUE_EXPR (decl))))
            tree_add_const_value_attribute_for_decl (die, decl);
          else
            add_location_or_const_value_attribute (die, decl, false);
        }

obviously above we're not only creating "early" debug.  It seems obvious
to me that we want to skip the later code which is intended for early
dwarf only.

Reply via email to