Blame SOURCES/gcc34-dwarf2-pr20268.patch

6fdc0f
2005-03-30  James E. Wilson  <wilson@specifixinc.com>
6fdc0f
6fdc0f
	PR debug/20268
6fdc0f
	* dwarf2out.c (add_high_low_attributes): New function, extracted from
6fdc0f
	gen_lexical_block_die.
6fdc0f
	(gen_lexical_block_die, gen_inlined_subroutine_die): Call it.
6fdc0f
6fdc0f
--- gcc/dwarf2out.c.orig	2005-11-17 18:30:11.000000000 -0200
6fdc0f
+++ gcc/dwarf2out.c	2005-11-17 18:31:51.000000000 -0200
6fdc0f
@@ -11509,41 +11509,49 @@
6fdc0f
     }
6fdc0f
 }
6fdc0f
 
6fdc0f
-/* Generate a DIE for a lexical block.  */
6fdc0f
+/* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
6fdc0f
+   Add low_pc and high_pc attributes to the DIE for a block STMT.  */
6fdc0f
 
6fdc0f
-static void
6fdc0f
-gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
6fdc0f
+static inline void
6fdc0f
+add_high_low_attributes (tree stmt, dw_die_ref die)
6fdc0f
 {
6fdc0f
-  dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
6fdc0f
   char label[MAX_ARTIFICIAL_LABEL_BYTES];
6fdc0f
 
6fdc0f
-  if (! BLOCK_ABSTRACT (stmt))
6fdc0f
+  if (BLOCK_FRAGMENT_CHAIN (stmt))
6fdc0f
     {
6fdc0f
-      if (BLOCK_FRAGMENT_CHAIN (stmt))
6fdc0f
-	{
6fdc0f
-	  tree chain;
6fdc0f
+      tree chain;
6fdc0f
 
6fdc0f
-	  add_AT_range_list (stmt_die, DW_AT_ranges, add_ranges (stmt));
6fdc0f
+      add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
6fdc0f
 
6fdc0f
-	  chain = BLOCK_FRAGMENT_CHAIN (stmt);
6fdc0f
-	  do
6fdc0f
-	    {
6fdc0f
-	      add_ranges (chain);
6fdc0f
-	      chain = BLOCK_FRAGMENT_CHAIN (chain);
6fdc0f
-	    }
6fdc0f
-	  while (chain);
6fdc0f
-	  add_ranges (NULL);
6fdc0f
-	}
6fdc0f
-      else
6fdc0f
+      chain = BLOCK_FRAGMENT_CHAIN (stmt);
6fdc0f
+      do
6fdc0f
 	{
6fdc0f
-	  ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
6fdc0f
-				       BLOCK_NUMBER (stmt));
6fdc0f
-	  add_AT_lbl_id (stmt_die, DW_AT_low_pc, label);
6fdc0f
-	  ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
6fdc0f
-				       BLOCK_NUMBER (stmt));
6fdc0f
-	  add_AT_lbl_id (stmt_die, DW_AT_high_pc, label);
6fdc0f
+	  add_ranges (chain);
6fdc0f
+	  chain = BLOCK_FRAGMENT_CHAIN (chain);
6fdc0f
 	}
6fdc0f
+      while (chain);
6fdc0f
+      add_ranges (NULL);
6fdc0f
+    }
6fdc0f
+  else
6fdc0f
+    {
6fdc0f
+      ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
6fdc0f
+				   BLOCK_NUMBER (stmt));
6fdc0f
+      add_AT_lbl_id (die, DW_AT_low_pc, label);
6fdc0f
+      ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
6fdc0f
+				   BLOCK_NUMBER (stmt));
6fdc0f
+      add_AT_lbl_id (die, DW_AT_high_pc, label);
6fdc0f
     }
6fdc0f
+}
6fdc0f
+
6fdc0f
+/* Generate a DIE for a lexical block.  */
6fdc0f
+
6fdc0f
+static void
6fdc0f
+gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
6fdc0f
+{
6fdc0f
+  dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
6fdc0f
+
6fdc0f
+  if (! BLOCK_ABSTRACT (stmt))
6fdc0f
+    add_high_low_attributes (stmt, stmt_die);
6fdc0f
 
6fdc0f
   decls_for_scope (stmt, stmt_die, depth);
6fdc0f
 }
6fdc0f
@@ -11565,15 +11573,10 @@
6fdc0f
     {
6fdc0f
       dw_die_ref subr_die
6fdc0f
 	= new_die (DW_TAG_inlined_subroutine, context_die, stmt);
6fdc0f
-      char label[MAX_ARTIFICIAL_LABEL_BYTES];
6fdc0f
 
6fdc0f
       add_abstract_origin_attribute (subr_die, decl);
6fdc0f
-      ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
6fdc0f
-				   BLOCK_NUMBER (stmt));
6fdc0f
-      add_AT_lbl_id (subr_die, DW_AT_low_pc, label);
6fdc0f
-      ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
6fdc0f
-				   BLOCK_NUMBER (stmt));
6fdc0f
-      add_AT_lbl_id (subr_die, DW_AT_high_pc, label);
6fdc0f
+      add_high_low_attributes (stmt, subr_die);
6fdc0f
+
6fdc0f
       decls_for_scope (stmt, subr_die, depth);
6fdc0f
       current_function_has_inlines = 1;
6fdc0f
     }