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
This commit is contained in:
parent
e18d4a1904
commit
596b98ceab
@ -1,3 +1,11 @@
|
||||
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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
12
gcc/testsuite/gcc.dg/pr19345.c
Normal file
12
gcc/testsuite/gcc.dg/pr19345.c
Normal file
@ -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);
|
||||
}
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user