OSDN Git Service

gcc/ChangeLog:
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 2 Apr 2005 17:08:07 +0000 (17:08 +0000)
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 2 Apr 2005 17:08:07 +0000 (17:08 +0000)
PR debug/19345
* dwarf2out.c (add_abstract_origin_attribute): Revert accidental
change checked in along with 2005-03-03's patch for debug/20253.
* tree-inline.c (remap_type): Remap TYPE_STUB_DECL.
(remap_decl): Insert type decl in map earlier.
gcc/testsuite/ChangeLog:
* gcc.dg/pr19345.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@97449 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/dwarf2out.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr19345.c [new file with mode: 0644]
gcc/tree-inline.c

index 3cb960e..f158331 100644 (file)
@@ -1,5 +1,13 @@
 2005-04-02  Alexandre Oliva  <aoliva@redhat.com>
 
+       PR debug/19345
+       * dwarf2out.c (add_abstract_origin_attribute): Revert accidental
+       change checked in along with 2005-03-03's patch for debug/20253.
+       * tree-inline.c (remap_type): Remap TYPE_STUB_DECL.
+       (remap_decl): Insert type decl in map earlier.
+
+2005-04-02  Alexandre Oliva  <aoliva@redhat.com>
+
        PR tree-optimization/20640
        * tree-ssa-dce.c (remove_dead_stmt): Don't redirect edge to
        post-dominator if it has phi nodes.
index bf76113..6b08ab6 100644 (file)
@@ -10568,11 +10568,7 @@ add_abstract_origin_attribute (dw_die_ref die, tree origin)
       if (TYPE_P (fn))
        fn = TYPE_STUB_DECL (fn);
       
-      /* TYPE_STUB_DECL may have given us a NULL, which decl_function_context
-        won't like.  */
-      if (fn)  
-       fn = decl_function_context (fn);
-
+      fn = decl_function_context (fn);
       if (fn)
        dwarf2out_abstract_function (fn);
     }
index 1264cf7..2b3c2ce 100644 (file)
@@ -1,3 +1,7 @@
+2005-04-02  Daniel Berlin  <dberlin@dberlin.org>
+
+       * gcc.dg/pr19345.c: New test.
+
 2005-04-02  Alexandre Oliva  <aoliva@redhat.com>
 
        PR tree-optimization/20640
diff --git a/gcc/testsuite/gcc.dg/pr19345.c b/gcc/testsuite/gcc.dg/pr19345.c
new file mode 100644 (file)
index 0000000..40c6de4
--- /dev/null
@@ -0,0 +1,12 @@
+/* We shouldn't crash trying to produce the inlined structure type die debug info.  */
+/* { dg-do compile } */
+/* { dg-options "-O1 -g" } */
+inline void bar(char a[], unsigned int l)
+{
+  asm volatile ("" :: "m" ( *(struct {char x[l]; } *)a));
+}
+
+void foo(void)
+{
+  bar (0, 0);
+}
index ef284a1..59a2d72 100644 (file)
@@ -172,6 +172,11 @@ remap_decl (tree decl, inline_data *id)
       /* Make a copy of the variable or label.  */
       tree t = copy_decl_for_inlining (decl, fn, VARRAY_TREE (id->fns, 0));
 
+      /* Remember it, so that if we encounter this local entity again
+        we can reuse this copy.  Do this early because remap_type may
+        need this decl for TYPE_STUB_DECL.  */
+      insert_decl_map (id, decl, t);
+
       /* Remap types, if necessary.  */
       TREE_TYPE (t) = remap_type (TREE_TYPE (t), id);
       if (TREE_CODE (t) == TYPE_DECL)
@@ -214,9 +219,6 @@ remap_decl (tree decl, inline_data *id)
        }
 #endif
 
-      /* Remember it, so that if we encounter this local entity
-        again we can reuse this copy.  */
-      insert_decl_map (id, decl, t);
       return t;
     }
 
@@ -285,6 +287,9 @@ remap_type (tree type, inline_data *id)
       TYPE_NEXT_VARIANT (new) = NULL;
     }
 
+  if (TYPE_STUB_DECL (type))
+    TYPE_STUB_DECL (new) = remap_decl (TYPE_STUB_DECL (type), id);
+
   /* Lazily create pointer and reference types.  */
   TYPE_POINTER_TO (new) = NULL;
   TYPE_REFERENCE_TO (new) = NULL;