Commit 596b98ce by Alexandre Oliva

re PR debug/19345 (Segmentation fault with VLA and inlining and dwarf2)

gcc/ChangeLog:
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.

From-SVN: r97449
parent e18d4a19
2005-04-02 Alexandre Oliva <aoliva@redhat.com> 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 PR tree-optimization/20640
* tree-ssa-dce.c (remove_dead_stmt): Don't redirect edge to * tree-ssa-dce.c (remove_dead_stmt): Don't redirect edge to
post-dominator if it has phi nodes. post-dominator if it has phi nodes.
......
...@@ -10568,11 +10568,7 @@ add_abstract_origin_attribute (dw_die_ref die, tree origin) ...@@ -10568,11 +10568,7 @@ add_abstract_origin_attribute (dw_die_ref die, tree origin)
if (TYPE_P (fn)) if (TYPE_P (fn))
fn = TYPE_STUB_DECL (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) if (fn)
dwarf2out_abstract_function (fn); dwarf2out_abstract_function (fn);
} }
......
2005-04-02 Daniel Berlin <dberlin@dberlin.org>
* gcc.dg/pr19345.c: New test.
2005-04-02 Alexandre Oliva <aoliva@redhat.com> 2005-04-02 Alexandre Oliva <aoliva@redhat.com>
PR tree-optimization/20640 PR tree-optimization/20640
......
/* 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);
}
...@@ -172,6 +172,11 @@ remap_decl (tree decl, inline_data *id) ...@@ -172,6 +172,11 @@ remap_decl (tree decl, inline_data *id)
/* Make a copy of the variable or label. */ /* Make a copy of the variable or label. */
tree t = copy_decl_for_inlining (decl, fn, VARRAY_TREE (id->fns, 0)); 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. */ /* Remap types, if necessary. */
TREE_TYPE (t) = remap_type (TREE_TYPE (t), id); TREE_TYPE (t) = remap_type (TREE_TYPE (t), id);
if (TREE_CODE (t) == TYPE_DECL) if (TREE_CODE (t) == TYPE_DECL)
...@@ -214,9 +219,6 @@ remap_decl (tree decl, inline_data *id) ...@@ -214,9 +219,6 @@ remap_decl (tree decl, inline_data *id)
} }
#endif #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; return t;
} }
...@@ -285,6 +287,9 @@ remap_type (tree type, inline_data *id) ...@@ -285,6 +287,9 @@ remap_type (tree type, inline_data *id)
TYPE_NEXT_VARIANT (new) = NULL; 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. */ /* Lazily create pointer and reference types. */
TYPE_POINTER_TO (new) = NULL; TYPE_POINTER_TO (new) = NULL;
TYPE_REFERENCE_TO (new) = NULL; TYPE_REFERENCE_TO (new) = NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment