diff options
author | Richard Henderson <rth@redhat.com> | 2010-08-04 16:32:08 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2010-08-04 16:32:08 -0700 |
commit | e78f1a3f6710a19026c9746cdea6a7df25956bba (patch) | |
tree | 13236b211e435781d93b695c641cf2855a836389 /gcc/dwarf2out.c | |
parent | fde157f2ed3550acb3de83440e33c919cf7942c0 (diff) | |
download | gcc-e78f1a3f6710a19026c9746cdea6a7df25956bba.zip gcc-e78f1a3f6710a19026c9746cdea6a7df25956bba.tar.gz gcc-e78f1a3f6710a19026c9746cdea6a7df25956bba.tar.bz2 |
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
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 95de468..651642a 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -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. - - 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); + 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. */ + 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), |