(gen_variable_dir): Add test for DW_AT_declaration to the old_die if statement, and...
authorJim Wilson <wilson@gcc.gnu.org>
Tue, 22 Apr 1997 22:19:47 +0000 (15:19 -0700)
committerJim Wilson <wilson@gcc.gnu.org>
Tue, 22 Apr 1997 22:19:47 +0000 (15:19 -0700)
(gen_variable_dir):  Add test for DW_AT_declaration to
the old_die if statement, and delete assertion for it.
(decl_ultimate_origin): Remove last change.

From-SVN: r13956

gcc/dwarf2out.c

index 1341ed712ddadc264b1690a032acfb130e5f4b0c..c30785f110098b76fee8e0bb8bf73ea351c909ed 100644 (file)
@@ -1998,7 +1998,7 @@ decl_ultimate_origin (decl)
 {
   register tree immediate_origin = DECL_ABSTRACT_ORIGIN (decl);
 
-  if (immediate_origin == NULL_TREE || immediate_origin == decl)
+  if (immediate_origin == NULL_TREE)
     return NULL_TREE;
   else
     {
@@ -7453,9 +7453,15 @@ gen_variable_die (decl, context_die)
 
   if (origin != NULL)
     add_abstract_origin_attribute (var_die, origin);
-  else if (old_die && TREE_STATIC (decl))
-    {
-      assert (get_AT_flag (old_die, DW_AT_declaration) == 1);
+  /* Loop unrolling can create multiple blocks that refer to the same
+     static variable, so we must test for the DW_AT_declaration flag.  */
+  /* ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
+     copy decls and set the DECL_ABSTRACT flag on them instead of
+     sharing them.  */
+  else if (old_die && TREE_STATIC (decl)
+          && get_AT_flag (old_die, DW_AT_declaration) == 1)
+    {
+      /* ??? This is an instantiation of a C++ class level static.  */
       add_AT_die_ref (var_die, DW_AT_specification, old_die);
       if (DECL_NAME (decl))
        {