re PR debug/45171 (Invalid DWARF...DIE 0x00006a1d has multiple AT_byte_size attributes.)

PR debug/45171
* dwarf2out.c (gen_typedef_die): Don't re-generate the die of
an is_naming_typedef_decl.

From-SVN: r162882
This commit is contained in:
Richard Henderson 2010-08-04 16:32:08 -07:00 committed by Richard Henderson
parent fde157f2ed
commit e78f1a3f67
3 changed files with 32 additions and 14 deletions

View File

@ -1,3 +1,9 @@
2010-08-04 Richard Henderson <rth@redhat.com>
PR debug/45171
* dwarf2out.c (gen_typedef_die): Don't re-generate the die of
an is_naming_typedef_decl.
2010-08-04 Bernd Schmidt <bernds@codesourcery.com>
PR rtl-optimization/45162

View File

@ -19785,22 +19785,24 @@ gen_typedef_die (tree decl, dw_die_ref context_die)
type = TREE_TYPE (decl);
if (is_naming_typedef_decl (TYPE_NAME (type)))
/*
Here, we are in the case of decl being a typedef naming
an anonymous type, e.g:
{
/* Here, we are in the case of decl being a typedef naming
an anonymous type, e.g:
typedef struct {...} foo;
In that case TREE_TYPE (decl) is not a typedef variant
type and TYPE_NAME of the anonymous type is set to the
TYPE_DECL of the typedef. This construct is emitted by
the C++ FE.
In that case TREE_TYPE (decl) is not a typedef variant
type and TYPE_NAME of the anonymous type is set to the
TYPE_DECL of the typedef. This construct is emitted by
the C++ FE.
TYPE is the anonymous struct named by the typedef
DECL. As we need the DW_AT_type attribute of the
DW_TAG_typedef to point to the DIE of TYPE, let's
generate that DIE right away. add_type_attribute
called below will then pick (via lookup_type_die) that
anonymous struct DIE. */
gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
TYPE is the anonymous struct named by the typedef
DECL. As we need the DW_AT_type attribute of the
DW_TAG_typedef to point to the DIE of TYPE, let's
generate that DIE right away. add_type_attribute
called below will then pick (via lookup_type_die) that
anonymous struct DIE. */
if (!TREE_ASM_WRITTEN (type))
gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
}
}
add_type_attribute (type_die, type, TREE_READONLY (decl),

View File

@ -0,0 +1,10 @@
// Origin: PR debug/45171
// { dg-options "-g -dA -fno-eliminate-unused-debug-types" }
// { dg-do compile }
// There should be 2 real instances of byte_size -- one for the
// struct and one for "int". The other two instances are from
// the comments in the .debug_abbrev section.
// { dg-final { scan-assembler-times "DW_AT_byte_size" 4 } }
typedef struct { int a, b; } x;