Revert incorrect merging of debug-early branch.
authorAldy Hernandez <aldyh@gcc.gnu.org>
Thu, 4 Sep 2014 18:04:14 +0000 (18:04 +0000)
committerAldy Hernandez <aldyh@gcc.gnu.org>
Thu, 4 Sep 2014 18:04:14 +0000 (18:04 +0000)
From-SVN: r214914

13 files changed:
gcc/c/c-decl.c
gcc/cp/name-lookup.c
gcc/dbxout.c
gcc/debug.c
gcc/debug.h
gcc/dwarf2out.c
gcc/fortran/trans-decl.c
gcc/godump.c
gcc/lto/lto-lang.c
gcc/sdbout.c
gcc/toplev.c
gcc/tree.c
gcc/vmsdbgout.c

index 1e09404dd55ea72f16fea943908ebffe39b3b14a..b4995a67733c6c74cdba559cced0e43a774559b9 100644 (file)
@@ -10308,10 +10308,7 @@ c_write_global_declarations_1 (tree globals)
   while (reconsider);
 
   for (decl = globals; decl; decl = DECL_CHAIN (decl))
-    {
-      check_global_declaration_1 (decl);
-      debug_hooks->global_decl (decl, /*early=*/true);
-    }
+    check_global_declaration_1 (decl);
 }
 
 /* A subroutine of c_write_global_declarations Emit debug information for each
@@ -10323,7 +10320,7 @@ c_write_global_declarations_2 (tree globals)
   tree decl;
 
   for (decl = globals; decl ; decl = DECL_CHAIN (decl))
-    debug_hooks->global_decl (decl, /*early=*/false);
+    debug_hooks->global_decl (decl);
 }
 
 /* Callback to collect a source_ref from a DECL.  */
index 45b3b999325932f84343388e82de4e66ea586240..ebcbb5c5580f4933a7252d76a70a83de943a6f36 100644 (file)
@@ -3859,7 +3859,7 @@ do_namespace_alias (tree alias, tree name_space)
 
   /* Emit debug info for namespace alias.  */
   if (!building_stmt_list_p ())
-    (*debug_hooks->global_decl) (alias, /*early=*/false);
+    (*debug_hooks->global_decl) (alias);
 }
 
 /* Like pushdecl, only it places X in the current namespace,
index 208cec91b8e0252dfc3a984dfa625e8726cc326e..d856bddc115d8fa4f3bdb1d0bbece8a587ba0dfd 100644 (file)
@@ -325,7 +325,7 @@ static int dbxout_symbol_location (tree, tree, const char *, rtx);
 static void dbxout_symbol_name (tree, const char *, int);
 static void dbxout_common_name (tree, const char *, stab_code_type);
 static const char *dbxout_common_check (tree, int *);
-static void dbxout_global_decl (tree, bool);
+static void dbxout_global_decl (tree);
 static void dbxout_type_decl (tree, int);
 static void dbxout_handle_pch (unsigned);
 static void debug_free_queue (void);
@@ -1320,7 +1320,7 @@ dbxout_function_decl (tree decl)
 /* Debug information for a global DECL.  Called from toplev.c after
    compilation proper has finished.  */
 static void
-dbxout_global_decl (tree decl, bool early ATTRIBUTE_UNUSED)
+dbxout_global_decl (tree decl)
 {
   if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl))
     {
index b5818de3a3b1d086918c281b60f1a4358f26319a..dba068cc24adc88b1072324c019df2b498b862c7 100644 (file)
@@ -43,7 +43,7 @@ const struct gcc_debug_hooks do_nothing_debug_hooks =
   debug_nothing_tree,                   /* begin_function */
   debug_nothing_int,                    /* end_function */
   debug_nothing_tree,                   /* function_decl */
-  debug_nothing_tree_bool,              /* global_decl */
+  debug_nothing_tree,                   /* global_decl */
   debug_nothing_tree_int,               /* type_decl */
   debug_nothing_tree_tree_tree_bool,    /* imported_module_or_decl */
   debug_nothing_tree,                   /* deferred_inline_function */
@@ -70,12 +70,6 @@ debug_nothing_tree (tree decl ATTRIBUTE_UNUSED)
 {
 }
 
-void
-debug_nothing_tree_bool (tree decl ATTRIBUTE_UNUSED,
-                        bool early ATTRIBUTE_UNUSED)
-{
-}
-
 void
 debug_nothing_tree_tree (tree t1 ATTRIBUTE_UNUSED,
                         tree t2 ATTRIBUTE_UNUSED)
index 944051524437b987c7c94fdf08f4e938825d9a5f..3ac7976c5de7e8cd90249de9100976f26750b41b 100644 (file)
@@ -93,11 +93,8 @@ struct gcc_debug_hooks
   void (* function_decl) (tree decl);
 
   /* Debug information for a global DECL.  Called from toplev.c after
-     compilation proper has finished.  EARLY is true if global_decl()
-     is being called early on in the compilation process (i.e., before
-     cgraph information is available and before code is
-     generated).  */
-  void (* global_decl) (tree decl, bool early);
+     compilation proper has finished.  */
+  void (* global_decl) (tree decl);
 
   /* Debug information for a type DECL.  Called from toplev.c after
      compilation proper, also from various language front ends to
@@ -159,7 +156,6 @@ extern void debug_nothing_int_charstar_int_bool (unsigned int, const char *,
 extern void debug_nothing_int (unsigned int);
 extern void debug_nothing_int_int (unsigned int, unsigned int);
 extern void debug_nothing_tree (tree);
-extern void debug_nothing_tree_bool (tree, bool);
 extern void debug_nothing_tree_tree (tree, tree);
 extern void debug_nothing_tree_int (tree, int);
 extern void debug_nothing_tree_tree_tree_bool (tree, tree, tree, bool);
@@ -191,8 +187,6 @@ extern void dwarf2out_switch_text_section (void);
 const char *remap_debug_filename (const char *);
 void add_debug_prefix_map (const char *);
 
-extern void dwarf2out_early_decl (tree);
-
 /* For -fdump-go-spec.  */
 
 extern const struct gcc_debug_hooks *
index 918f26177eee4350dcb1c61ded25a179aa7016ca..23a80d831cbea38bb9d5d134e77936a0863ede93 100644 (file)
@@ -103,7 +103,7 @@ along with GCC; see the file COPYING3.  If not see
 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
 static rtx_insn *last_var_location_insn;
 static rtx_insn *cached_next_real_insn;
-static dw_die_ref dwarf2out_decl (tree);
+static void dwarf2out_decl (tree);
 
 #ifdef VMS_DEBUGGING_INFO
 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
@@ -2430,7 +2430,7 @@ static void dwarf2out_function_decl (tree);
 static void dwarf2out_begin_block (unsigned, unsigned);
 static void dwarf2out_end_block (unsigned, unsigned);
 static bool dwarf2out_ignore_block (const_tree);
-static void dwarf2out_global_decl (tree, bool);
+static void dwarf2out_global_decl (tree);
 static void dwarf2out_type_decl (tree, int);
 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
@@ -2609,8 +2609,6 @@ typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
   /* Die is used and must not be pruned as unused.  */
   BOOL_BITFIELD die_perennial_p : 1;
   BOOL_BITFIELD comdat_type_p : 1; /* DIE has a type signature */
-  /* Die was generated early via dwarf2out_early_decl.  */
-  BOOL_BITFIELD dumped_early : 1;
   /* Lots of spare bits.  */
 }
 die_node;
@@ -3681,7 +3679,7 @@ decl_ultimate_origin (const_tree decl)
   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
      nodes in the function to point to themselves; ignore that if
      we're trying to output the abstract instance of this function.  */
-  if (/*DECL_ABSTRACT (decl) &&*/ DECL_ABSTRACT_ORIGIN (decl) == decl)
+  if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
     return NULL_TREE;
 
   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
@@ -4781,7 +4779,6 @@ remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
     while (c->die_tag == tag)
       {
        remove_child_with_prev (c, prev);
-       c->die_parent = NULL;
        /* Might have removed every child.  */
        if (c == c->die_sib)
          return;
@@ -4811,21 +4808,6 @@ add_child_die (dw_die_ref die, dw_die_ref child_die)
   die->die_child = child_die;
 }
 
-/* Unassociate CHILD from its parent, and make its parent be
-   NEW_PARENT.  */
-
-static void
-reparent_child (dw_die_ref child, dw_die_ref new_parent)
-{
-  for (dw_die_ref p = child->die_parent->die_child; ; p = p->die_sib)
-    if (p->die_sib == child)
-      {
-       remove_child_with_prev (child, p);
-       break;
-      }
-  add_child_die (new_parent, child);
-}
-
 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
    is the specification, to the end of PARENT's list of children.
    This is done by removing and re-adding it.  */
@@ -4833,6 +4815,8 @@ reparent_child (dw_die_ref child, dw_die_ref new_parent)
 static void
 splice_child_die (dw_die_ref parent, dw_die_ref child)
 {
+  dw_die_ref p;
+
   /* We want the declaration DIE from inside the class, not the
      specification DIE at toplevel.  */
   if (child->die_parent != parent)
@@ -4847,7 +4831,14 @@ splice_child_die (dw_die_ref parent, dw_die_ref child)
              || (child->die_parent
                  == get_AT_ref (parent, DW_AT_specification)));
 
-  reparent_child (child, parent);
+  for (p = child->die_parent->die_child; ; p = p->die_sib)
+    if (p->die_sib == child)
+      {
+       remove_child_with_prev (child, p);
+       break;
+      }
+
+  add_child_die (parent, child);
 }
 
 /* Return a pointer to a newly created DIE node.  */
@@ -5526,49 +5517,6 @@ debug_dwarf (void)
   print_indent = 0;
   print_die (comp_unit_die (), stderr);
 }
-
-/* Perform some sanity checks on DIEs after they have been generated
-   earlier in the compilation process.  */
-
-static void
-check_die (dw_die_ref die, unsigned level)
-{
-  static unsigned long mark = 1;
-  dw_die_ref c, p;
-  /* Check that all our childs have their parent set to us.  */
-  c = die->die_child;
-  if (c) do {
-      c = c->die_sib;
-      gcc_assert (c->die_parent == die);
-    } while (c != die->die_child);
-
-  /* Check the we are part of our parent's child list.  */
-  mark++;
-  p = die->die_parent;
-  if (p)
-    {
-      c = p->die_child;
-      gcc_assert (c);
-      do {
-       c = c->die_sib;
-       /* Found it.  */
-       if (c == die)
-         break;
-       /* If we're at start --> not found.  */
-       gcc_assert (c != p->die_child);
-       /* If we've seen this node already the circular list doesn't
-          even go back to start.  */
-       gcc_assert (c->die_abbrev != mark);
-       c->die_abbrev = mark;
-      } while (1);
-    }
-
-  if (!level)
-    return;
-
-  FOR_EACH_CHILD (die, c, check_die (c, level - 1));
-}
-
 \f
 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
@@ -8711,11 +8659,9 @@ output_die (dw_die_ref die)
   if (! die->comdat_type_p && die->die_id.die_symbol)
     output_die_symbol (die);
 
-  dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s (parent DIE=%#lx) early=%d)",
+  dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
                               (unsigned long)die->die_offset,
-                              dwarf_tag_name (die->die_tag),
-                              die->die_parent ? die->die_parent->die_offset : 0,
-                              die->dumped_early);
+                              dwarf_tag_name (die->die_tag));
 
   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
     {
@@ -17657,40 +17603,8 @@ gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
 {
   tree node_or_origin = node ? node : origin;
   tree ultimate_origin;
-  dw_die_ref parm_die = NULL;
-  
-  if (TREE_CODE_CLASS (TREE_CODE (node_or_origin)) == tcc_declaration)
-    {
-      parm_die = lookup_decl_die (node);
-
-      if (parm_die && parm_die->die_parent == NULL)
-       {
-         /* Check that parm_die already has the right attributes that
-            we would have added below.  If any attributes are
-            missing, fall through to add them.
-
-            ?? Add more checks here.  */
-         if (! DECL_ABSTRACT (node_or_origin)
-             && !get_AT (parm_die, DW_AT_location)
-             && !get_AT (parm_die, DW_AT_const_value))
-           /* We are missing  location info, and are about to add it.  */
-           ;
-         else
-           {
-             add_child_die (context_die, parm_die);
-             return parm_die;
-           }
-       }
-    }
-
-  bool reusing_die;
-  if (parm_die)
-    reusing_die = true;
-  else
-    {
-      parm_die = new_die (DW_TAG_formal_parameter, context_die, node);
-      reusing_die = false;
-    }
+  dw_die_ref parm_die
+    = new_die (DW_TAG_formal_parameter, context_die, node);
 
   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
     {
@@ -17698,11 +17612,7 @@ gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
       ultimate_origin = decl_ultimate_origin (node_or_origin);
       if (node || ultimate_origin)
        origin = ultimate_origin;
-
-      if (reusing_die)
-       goto add_location;
-
-      if (origin != NULL && node != origin)
+      if (origin != NULL)
        add_abstract_origin_attribute (parm_die, origin);
       else if (emit_name_p)
        add_name_and_src_coords_attributes (parm_die, node);
@@ -17726,7 +17636,6 @@ gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
 
       if (node && node != origin)
         equate_decl_number_to_die (node, parm_die);
-    add_location:
       if (! DECL_ABSTRACT (node_or_origin))
        add_location_or_const_value_attribute (parm_die, node_or_origin,
                                               node == NULL, DW_AT_location);
@@ -18241,7 +18150,7 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
       && debug_info_level > DINFO_LEVEL_TERSE)
     old_die = force_decl_die (decl);
 
-  if (origin != NULL && origin != decl)
+  if (origin != NULL)
     {
       gcc_assert (!declaration || local_scope_p (context_die));
 
@@ -18271,13 +18180,7 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
          && !get_AT (old_die, DW_AT_inline))
        {
          /* Detect and ignore this case, where we are trying to output
-            something we have already output.
-
-            If we have no location information, this must be a
-            partially generated DIE from early dwarf generation.
-            Fall through and generate it.  */
-         if (get_AT (old_die, DW_AT_low_pc)
-             || get_AT (old_die, DW_AT_ranges))
+            something we have already output.  */
          return;
        }
 
@@ -18296,20 +18199,14 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
        {
          subr_die = old_die;
 
-         /* ??? Hmmm, early dwarf generation happened earlier, so no
-            sense in removing the parameters.  Let's keep them and
-            augment them with location information later.  */
-         if (!old_die->dumped_early)
-           {
-             /* Clear out the declaration attribute and the formal parameters.
-                Do not remove all children, because it is possible that this
-                declaration die was forced using force_decl_die(). In such
-                cases die that forced declaration die (e.g. TAG_imported_module)
-                is one of the children that we do not want to remove.  */
-             remove_AT (subr_die, DW_AT_declaration);
-             remove_AT (subr_die, DW_AT_object_pointer);
-             remove_child_TAG (subr_die, DW_TAG_formal_parameter);
-           }
+         /* Clear out the declaration attribute and the formal parameters.
+            Do not remove all children, because it is possible that this
+            declaration die was forced using force_decl_die(). In such
+            cases die that forced declaration die (e.g. TAG_imported_module)
+            is one of the children that we do not want to remove.  */
+         remove_AT (subr_die, DW_AT_declaration);
+         remove_AT (subr_die, DW_AT_object_pointer);
+         remove_child_TAG (subr_die, DW_TAG_formal_parameter);
        }
       else
        {
@@ -18400,12 +18297,9 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
 
       equate_decl_number_to_die (decl, subr_die);
     }
-  else if (!DECL_EXTERNAL (decl)
-          && (!DECL_STRUCT_FUNCTION (decl)
-              || DECL_STRUCT_FUNCTION (decl)->gimple_df))
+  else if (!DECL_EXTERNAL (decl))
     {
       HOST_WIDE_INT cfa_fb_offset;
-
       struct function *fun = DECL_STRUCT_FUNCTION (decl);
 
       if (!old_die || !get_AT (old_die, DW_AT_inline))
@@ -18568,20 +18462,10 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
        add_AT_location_description (subr_die, DW_AT_static_link,
                 loc_list_from_tree (fun->static_chain_decl, 2));
     }
-  else if (!DECL_EXTERNAL (decl))
-    {
-      if (!old_die || !get_AT (old_die, DW_AT_inline))
-       equate_decl_number_to_die (decl, subr_die);
-    }
 
   /* Generate child dies for template paramaters.  */
   if (debug_info_level > DINFO_LEVEL_TERSE)
-    {
-      /* XXX */
-      if (!lookup_decl_die (decl))
-       equate_decl_number_to_die (decl, subr_die);
-      gen_generic_params_dies (decl);
-    }
+    gen_generic_params_dies (decl);
 
   /* Now output descriptions of the arguments for this function. This gets
      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
@@ -18685,9 +18569,7 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
      a BLOCK node representing the function's outermost pair of curly braces,
      and any blocks used for the base and member initializers of a C++
      constructor function.  */
-  if (! declaration && outer_scope && TREE_CODE (outer_scope) != ERROR_MARK
-      && (!DECL_STRUCT_FUNCTION (decl)
-         || DECL_STRUCT_FUNCTION (decl)->gimple_df))
+  if (! declaration && outer_scope && TREE_CODE (outer_scope) != ERROR_MARK)
     {
       int call_site_note_count = 0;
       int tail_call_site_note_count = 0;
@@ -19007,19 +18889,9 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
      and if we already emitted a DIE for it, don't emit a second
      DIE for it again. Allow re-declarations of DECLs that are
      inside functions, though.  */
-  if (old_die && !declaration && !local_scope_p (context_die))
+  if (old_die && declaration && !local_scope_p (context_die))
     return;
 
-  /* If a DIE was dumped early, it still needs location info.  Skip to
-     the part where we fill the location bits.  */
-  if (old_die && old_die->dumped_early)
-    {
-      gcc_assert (old_die->die_parent == context_die);
-      var_die = old_die;
-      old_die = NULL;
-      goto gen_variable_die_location;
-    }
-
   /* For static data members, the declaration in the class is supposed
      to have DW_TAG_member tag; the specification should still be
      DW_TAG_variable referencing the DW_TAG_member DIE.  */
@@ -19103,7 +18975,6 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
   if (decl && (DECL_ABSTRACT (decl) || declaration || old_die == NULL))
     equate_decl_number_to_die (decl, var_die);
 
- gen_variable_die_location:
   if (! declaration
       && (! DECL_ABSTRACT (decl_or_origin)
          /* Local static vars are shared between all clones/inlines,
@@ -20817,29 +20688,12 @@ gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
   return NULL;
 }
 \f
-/* Output debug information for global decl DECL.  Called from
-   toplev.c after compilation proper has finished.
-
-   dwarf2out_decl() will be called twice on each global symbol: once
-   immediately after parsing (EARLY=true), and once after the full
-   compilation has finished (EARLY=false).  There are checks in
-   dwarf2out_decl() to make sure that if we have a DECL DIE upon
-   entry, that the previously created DIE is reused.  No new DECL DIEs
-   should be created when EARLY=false.
-
-   The second time dwarf2out_decl() is called (or for that matter, the
-   second time any DECL DIE is seen throughout dwarf2out), only
-   information not previously available (e.g. location) is tacked onto
-   the early dumped DIE.  That's the plan anyhow ;-).  */
+/* Output debug information for global decl DECL.  Called from toplev.c after
+   compilation proper has finished.  */
 
 static void
-dwarf2out_global_decl (tree decl, bool early)
+dwarf2out_global_decl (tree decl)
 {
-  if (early)
-    {
-      dwarf2out_early_decl (decl);
-      return;
-    }
   /* Output DWARF2 information for file-scope tentative data object
      declarations, file-scope (extern) function declarations (which
      had no corresponding body) and file-scope tagged type declarations
@@ -21028,30 +20882,17 @@ gen_namelist_decl (tree name, dw_die_ref scope_die, tree item_decls)
 }
 
 
-/* Write the debugging output for DECL and return the DIE.  */
+/* Write the debugging output for DECL.  */
 
-static dw_die_ref
+static void
 dwarf2out_decl (tree decl)
 {
   dw_die_ref context_die = comp_unit_die ();
 
-#ifdef ENABLE_CHECKING
-  /* Save some info so we can later determine if we erroneously
-     created a DIE for something we had already created a DIE for.
-     We should always be reusing DIEs created early.  */
-  dw_die_ref early_die = NULL;
-  if (decl_die_table)
-    {
-      early_die = lookup_decl_die (decl);
-      if (early_die && !early_die->dumped_early)
-       early_die = NULL;
-    }
-#endif
-
   switch (TREE_CODE (decl))
     {
     case ERROR_MARK:
-      return NULL;
+      return;
 
     case FUNCTION_DECL:
       /* What we would really like to do here is to filter out all mere
@@ -21088,7 +20929,7 @@ dwarf2out_decl (tree decl)
         or not at all.  */
       if (DECL_INITIAL (decl) == NULL_TREE
          && ! DECL_ABSTRACT (decl))
-       return NULL;
+       return;
 
       /* If we're a nested function, initially use a parent of NULL; if we're
         a plain function, this will be fixed up in decls_for_scope.  If
@@ -21109,7 +20950,7 @@ dwarf2out_decl (tree decl)
         would screw-up the debugger's name lookup mechanism and cause it to
         miss things which really ought to be in scope at a given point.  */
       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
-       return NULL;
+       return;
 
       /* For local statics lookup proper context die.  */
       if (TREE_STATIC (decl)
@@ -21120,14 +20961,14 @@ dwarf2out_decl (tree decl)
       /* If we are in terse mode, don't generate any DIEs to represent any
         variable declarations or definitions.  */
       if (debug_info_level <= DINFO_LEVEL_TERSE)
-       return NULL;
+       return;
       break;
 
     case CONST_DECL:
       if (debug_info_level <= DINFO_LEVEL_TERSE)
-       return NULL;
+       return;
       if (!is_fortran () && !is_ada ())
-       return NULL;
+       return;
       if (TREE_STATIC (decl) && decl_function_context (decl))
        context_die = lookup_decl_die (DECL_CONTEXT (decl));
       break;
@@ -21135,24 +20976,24 @@ dwarf2out_decl (tree decl)
     case NAMESPACE_DECL:
     case IMPORTED_DECL:
       if (debug_info_level <= DINFO_LEVEL_TERSE)
-       return NULL;
+       return;
       if (lookup_decl_die (decl) != NULL)
-       return NULL;
+       return;
       break;
 
     case TYPE_DECL:
       /* Don't emit stubs for types unless they are needed by other DIEs.  */
       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
-       return NULL;
+       return;
 
       /* Don't bother trying to generate any DIEs to represent any of the
         normal built-in types for the language we are compiling.  */
       if (DECL_IS_BUILTIN (decl))
-       return NULL;
+       return;
 
       /* If we are in terse mode, don't generate any DIEs for types.  */
       if (debug_info_level <= DINFO_LEVEL_TERSE)
-       return NULL;
+       return;
 
       /* If we're a function-scope tag, initially use a parent of NULL;
         this will be fixed up in decls_for_scope.  */
@@ -21165,66 +21006,10 @@ dwarf2out_decl (tree decl)
       break;
 
     default:
-      return NULL;
+      return;
     }
 
   gen_decl_die (decl, NULL, context_die);
-
-  dw_die_ref die = lookup_decl_die (decl);
-  if (die)
-    check_die (die, 0);
-#ifdef ENABLE_CHECKING
-  /* If we early created a DIE, make sure it didn't get re-created by
-     mistake.  */
-  gcc_assert (!early_die || early_die == die);
-#endif
-  return die;
-}
-
-/* Early dumping of DECLs before we lose language data.  */
-
-void
-dwarf2out_early_decl (tree decl)
-{
-  /* gen_decl_die() will set DECL_ABSTRACT because
-     cgraph_function_possibly_inlined_p() returns true.  This is in
-     turn will cause DW_AT_inline attributes to be set.
-
-     This happens because at early dwarf generation, there is no
-     cgraph information, causing cgraph_function_possibly_inlined_p()
-     to return true.  Trick cgraph_function_possibly_inlined_p()
-     while we generate dwarf early.  */
-  bool save = symtab->global_info_ready;
-  symtab->global_info_ready = true;
-
-  /* We don't handle TYPE_DECLs.  If required, they'll be reached via
-     other DECLs and they can point to template types or other things
-     that dwarf2out can't handle when done via dwarf2out_decl.  */
-  if (TREE_CODE (decl) != TYPE_DECL
-      && TREE_CODE (decl) != PARM_DECL)
-    {
-      if (TREE_CODE (decl) == FUNCTION_DECL)
-       {
-         /* A missing cfun means the symbol is unused and was removed
-            from the callgraph.  */
-         if (!DECL_STRUCT_FUNCTION (decl))
-           goto early_decl_exit;
-
-         push_cfun (DECL_STRUCT_FUNCTION (decl));
-         current_function_decl = decl;
-       }
-      dw_die_ref die = dwarf2out_decl (decl);
-      if (die)
-       die->dumped_early = true;
-      if (TREE_CODE (decl) == FUNCTION_DECL)
-       {
-         pop_cfun ();
-         current_function_decl = NULL;
-       }
-    }
- early_decl_exit:
-  symtab->global_info_ready = save;
-  return;
 }
 
 /* Write the debugging output for DECL.  */
index 38e6f990e68576e0db7bdbdad23e74c958642df0..6afa6f3b6963ac3e65993290a9f628b6e74f8edd 100644 (file)
@@ -4693,7 +4693,7 @@ gfc_emit_parameter_debug_info (gfc_symbol *sym)
                                              TREE_TYPE (decl),
                                              sym->attr.dimension,
                                              false, false);
-  debug_hooks->global_decl (decl, /*early=*/false);
+  debug_hooks->global_decl (decl);
 }
 
 
index 01f8410ccd7cdb1f3f76dc435ce2210691f8eec8..7566f4d3effae89f779644e559aabcc80ba13ee4 100644 (file)
@@ -496,9 +496,9 @@ go_function_decl (tree decl)
 /* A global variable decl.  */
 
 static void
-go_global_decl (tree decl, bool early)
+go_global_decl (tree decl)
 {
-  real_debug_hooks->global_decl (decl, early);
+  real_debug_hooks->global_decl (decl);
   go_decl (decl);
 }
 
index 1f39949c811ffad759f30bd3580c6ca30853d431..9e8524acac2dbe267ff90168b129386d4d747cf7 100644 (file)
@@ -1093,7 +1093,7 @@ lto_write_globals (void)
   varpool_node *vnode;
   FOR_EACH_DEFINED_VARIABLE (vnode)
     if (!decl_function_context (vnode->decl))
-      debug_hooks->global_decl (vnode->decl, /*early=*/false);
+      debug_hooks->global_decl (vnode->decl);
 }
 
 static tree
index d81b184c415be14c240b619075f1c1a483fa3a66..7b6f4573e05b6b036f7121f68182da841f0d3064 100644 (file)
@@ -119,7 +119,7 @@ static void sdbout_begin_block              (unsigned int, unsigned int);
 static void sdbout_end_block           (unsigned int, unsigned int);
 static void sdbout_source_line         (unsigned int, const char *, int, bool);
 static void sdbout_end_epilogue                (unsigned int, const char *);
-static void sdbout_global_decl         (tree, bool);
+static void sdbout_global_decl         (tree);
 static void sdbout_begin_prologue      (unsigned int, const char *);
 static void sdbout_end_prologue                (unsigned int, const char *);
 static void sdbout_begin_function      (tree);
@@ -142,6 +142,7 @@ static void sdbout_field_types              (tree);
 static void sdbout_one_type            (tree);
 static void sdbout_parms               (tree);
 static void sdbout_reg_parms           (tree);
+static void sdbout_global_decl         (tree);
 
 /* Random macros describing parts of SDB data.  */
 
@@ -1421,7 +1422,7 @@ sdbout_reg_parms (tree parms)
    after compilation proper has finished.  */
 
 static void
-sdbout_global_decl (tree decl, bool early ATTRIBUTE_UNUSED)
+sdbout_global_decl (tree decl)
 {
   if (TREE_CODE (decl) == VAR_DECL
       && !DECL_EXTERNAL (decl)
index ceefa1bf6e916c81af32aa3a3aa331cfb113efea..492a7ef58e5234e9df90b71597f20a7d5177986a 100644 (file)
@@ -532,7 +532,7 @@ emit_debug_global_declarations (tree *vec, int len)
 
   timevar_push (TV_SYMOUT);
   for (i = 0; i < len; i++)
-    debug_hooks->global_decl (vec[i], /*early=*/false);
+    debug_hooks->global_decl (vec[i]);
   timevar_pop (TV_SYMOUT);
 }
 
index afc8e3d9559dd328b414d851fe3defcca7fd1703..d1d67efa62942cb9662ebb48127e7c83cccc0c77 100644 (file)
@@ -5032,10 +5032,6 @@ free_lang_data_in_decl (tree decl)
 {
   gcc_assert (DECL_P (decl));
 
-  /* Early dumping of DECLs before we lose language data.  */
-  if (debug_info_level > DINFO_LEVEL_NONE)
-    dwarf2out_early_decl (decl);
-
   /* Give the FE a chance to remove its own data first.  */
   lang_hooks.free_lang_data (decl);
 
@@ -5634,7 +5630,8 @@ free_lang_data (void)
   unsigned i;
 
   /* If we are the LTO frontend we have freed lang-specific data already.  */
-  if (in_lto_p)
+  if (in_lto_p
+      || !flag_generate_lto)
     return 0;
 
   /* Allocate and assign alias sets to the standard integer types
index 2ad9e9b5c14ce33b3adc9df6cec61228e51c63ef..463a4182622a7aef0f8366b54b56dfff790df0da 100644 (file)
@@ -163,7 +163,7 @@ static void vmsdbgout_begin_epilogue (unsigned int, const char *);
 static void vmsdbgout_end_epilogue (unsigned int, const char *);
 static void vmsdbgout_begin_function (tree);
 static void vmsdbgout_decl (tree);
-static void vmsdbgout_global_decl (tree, bool);
+static void vmsdbgout_global_decl (tree);
 static void vmsdbgout_type_decl (tree, int);
 static void vmsdbgout_abstract_function (tree);
 
@@ -1510,10 +1510,10 @@ vmsdbgout_decl (tree decl)
 /* Not implemented in VMS Debug.  */
 
 static void
-vmsdbgout_global_decl (tree decl, bool early)
+vmsdbgout_global_decl (tree decl)
 {
   if (write_symbols == VMS_AND_DWARF2_DEBUG)
-    (*dwarf2_debug_hooks.global_decl) (decl, early);
+    (*dwarf2_debug_hooks.global_decl) (decl);
 }
 
 /* Not implemented in VMS Debug.  */