* dwarf2read.c (process_enumeration_scope): Do not call new_symbol
in some declaration-only cases.
This commit is contained in:
parent
8b70b953ba
commit
6c83ed5236
|
@ -1,5 +1,10 @@
|
||||||
2011-07-20 Tom Tromey <tromey@redhat.com>
|
2011-07-20 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
* dwarf2read.c (process_enumeration_scope): Do not call new_symbol
|
||||||
|
in some declaration-only cases.
|
||||||
|
|
||||||
|
2011-07-18 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
PR symtab/12984:
|
PR symtab/12984:
|
||||||
* dwarf2read.c (dwarf2_section_info_def): New typedef.
|
* dwarf2read.c (dwarf2_section_info_def): New typedef.
|
||||||
(struct dwarf2_per_objfile) <types>: Change to a VEC.
|
(struct dwarf2_per_objfile) <types>: Change to a VEC.
|
||||||
|
|
|
@ -1207,6 +1207,11 @@ static struct die_info *follow_die_sig (struct die_info *,
|
||||||
struct attribute *,
|
struct attribute *,
|
||||||
struct dwarf2_cu **);
|
struct dwarf2_cu **);
|
||||||
|
|
||||||
|
static struct signatured_type *lookup_signatured_type_at_offset
|
||||||
|
(struct objfile *objfile,
|
||||||
|
struct dwarf2_section_info *section,
|
||||||
|
unsigned int offset);
|
||||||
|
|
||||||
static void read_signatured_type_at_offset (struct objfile *objfile,
|
static void read_signatured_type_at_offset (struct objfile *objfile,
|
||||||
struct dwarf2_section_info *sect,
|
struct dwarf2_section_info *sect,
|
||||||
unsigned int offset);
|
unsigned int offset);
|
||||||
|
@ -7730,6 +7735,27 @@ process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu)
|
||||||
TYPE_UNSIGNED (this_type) = 1;
|
TYPE_UNSIGNED (this_type) = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If we are reading an enum from a .debug_types unit, and the enum
|
||||||
|
is a declaration, and the enum is not the signatured type in the
|
||||||
|
unit, then we do not want to add a symbol for it. Adding a
|
||||||
|
symbol would in some cases obscure the true definition of the
|
||||||
|
enum, giving users an incomplete type when the definition is
|
||||||
|
actually available. Note that we do not want to do this for all
|
||||||
|
enums which are just declarations, because C++0x allows forward
|
||||||
|
enum declarations. */
|
||||||
|
if (cu->per_cu->debug_type_section
|
||||||
|
&& die_is_declaration (die, cu))
|
||||||
|
{
|
||||||
|
struct signatured_type *type_sig;
|
||||||
|
|
||||||
|
type_sig
|
||||||
|
= lookup_signatured_type_at_offset (dwarf2_per_objfile->objfile,
|
||||||
|
cu->per_cu->debug_type_section,
|
||||||
|
cu->per_cu->offset);
|
||||||
|
if (type_sig->type_offset != die->offset)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
new_symbol (die, this_type, cu);
|
new_symbol (die, this_type, cu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue