cgraphunit.c (analyze_functions): Set node->definition to false to signal symbol...
authorRichard Biener <rguenther@suse.de>
Thu, 20 Oct 2016 08:49:48 +0000 (08:49 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 20 Oct 2016 08:49:48 +0000 (08:49 +0000)
2016-10-20  Richard Biener  <rguenther@suse.de>

* cgraphunit.c (analyze_functions): Set node->definition to
false to signal symbol removal to debug_hooks->late_global_decl.
* ipa.c (symbol_table::remove_unreachable_nodes): When not in
WPA signal symbol removal to the debuginfo machinery.
* dwarf2out.c (dwarf2out_late_global_decl): Instead of
using early_finised to guard the we're called for symbol
removal case look at the symtabs definition flag.
(gen_variable_die): Remove redundant check.

From-SVN: r241363

gcc/ChangeLog
gcc/cgraphunit.c
gcc/dwarf2out.c
gcc/ipa.c

index 702be36a7969fec25dcd093bb9d7c8db8f3b190f..5655d13a679b6bf80311533623d1c6da7d84b7d2 100644 (file)
@@ -1,3 +1,14 @@
+2016-10-20  Richard Biener  <rguenther@suse.de>
+
+       * cgraphunit.c (analyze_functions): Set node->definition to
+       false to signal symbol removal to debug_hooks->late_global_decl.
+       * ipa.c (symbol_table::remove_unreachable_nodes): When not in
+       WPA signal symbol removal to the debuginfo machinery.
+       * dwarf2out.c (dwarf2out_late_global_decl): Instead of
+       using early_finised to guard the we're called for symbol
+       removal case look at the symtabs definition flag.
+       (gen_variable_die): Remove redundant check.
+
 2016-10-20  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        * config/s390/s390.md ("prefetch"): Add fallthrough comment.
index 4fa518d27c63ded2dcd348d0825951f09f2dea2d..e315a77ae7ceb316aee1449531026af4f32a5ea3 100644 (file)
@@ -1208,6 +1208,7 @@ analyze_functions (bool first_time)
                 so they effectively appear as readonly.  Show that to
                 the debug machinery.  */
              TREE_READONLY (node->decl) = 1;
+             node->definition = false;
              (*debug_hooks->late_global_decl) (node->decl);
            }
 
index ae4cad1d1632dd2c35ae05d21c567e094a67a70f..1d2e385bdde88c647ada181bc09b6e064a817b23 100644 (file)
@@ -21264,7 +21264,6 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
   tree ultimate_origin;
   dw_die_ref var_die;
   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
-  dw_die_ref origin_die = NULL;
   bool declaration = (DECL_EXTERNAL (decl_or_origin)
                      || class_or_namespace_scope_p (context_die));
   bool specialization_p = false;
@@ -21424,7 +21423,7 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
     var_die = new_die (DW_TAG_variable, context_die, decl);
 
   if (origin != NULL)
-    origin_die = add_abstract_origin_attribute (var_die, origin);
+    add_abstract_origin_attribute (var_die, origin);
 
   /* Loop unrolling can create multiple blocks that refer to the same
      static variable, so we must test for the DW_AT_declaration flag.
@@ -21500,10 +21499,7 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
             already set.  */
          || (VAR_P (decl_or_origin)
              && TREE_STATIC (decl_or_origin)
-             && DECL_RTL_SET_P (decl_or_origin)))
-      /* When abstract origin already has DW_AT_location attribute, no need
-        to add it again.  */
-      && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
+             && DECL_RTL_SET_P (decl_or_origin))))
     {
       if (early_dwarf)
        add_pubname (decl_or_origin, var_die);
@@ -23969,11 +23965,11 @@ dwarf2out_late_global_decl (tree decl)
 
       if (die)
        {
-         /* We get called during the early debug phase via the symtab
-            code invoking late_global_decl for symbols that are optimized
-            out.  When the early phase is not finished, do not add
-            locations.  */
-         if (! early_dwarf_finished)
+         /* We get called via the symtab code invoking late_global_decl
+            for symbols that are optimized out.  Do not add locations
+            for those.  */
+         varpool_node *node = varpool_node::get (decl);
+         if (! node || ! node->definition)
            tree_add_const_value_attribute_for_decl (die, decl);
          else
            add_location_or_const_value_attribute (die, decl, false);
index e20e4953e8fdc3d3fa319fba67f2f80114f2d459..879d9c249cd6ade298bfe39773bf1dec2c6b9fef 100644 (file)
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -36,6 +36,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "ipa-prop.h"
 #include "ipa-inline.h"
 #include "dbgcnt.h"
+#include "debug.h"
 
 
 /* Return true when NODE has ADDR reference.  */
@@ -622,6 +623,12 @@ symbol_table::remove_unreachable_nodes (FILE *file)
          if (file)
            fprintf (file, " %s/%i", vnode->name (), vnode->order);
           vnext = next_variable (vnode);
+         /* Signal removal to the debug machinery.  */
+         if (! flag_wpa)
+           {
+             vnode->definition = false;
+             (*debug_hooks->late_global_decl) (vnode->decl);
+           }
          vnode->remove ();
          changed = true;
        }