* dwarf2read.c (read_typedef): Guard against self-referential typedefs.

This commit is contained in:
Doug Evans 2011-12-31 17:18:13 +00:00
parent b909d38dfa
commit 3c8e0968a5
2 changed files with 18 additions and 2 deletions

View File

@ -1,3 +1,7 @@
2011-12-30 Doug Evans <dje@google.com>
* dwarf2read.c (read_typedef): Guard against self-referential typedefs.
2011-12-28 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdbarch.sh (max_insn_length): Extend the comment by unit.

View File

@ -8836,14 +8836,26 @@ read_typedef (struct die_info *die, struct dwarf2_cu *cu)
{
struct objfile *objfile = cu->objfile;
const char *name = NULL;
struct type *this_type;
struct type *this_type, *target_type;
name = dwarf2_full_name (NULL, die, cu);
this_type = init_type (TYPE_CODE_TYPEDEF, 0,
TYPE_FLAG_TARGET_STUB, NULL, objfile);
TYPE_NAME (this_type) = (char *) name;
set_die_type (die, this_type, cu);
TYPE_TARGET_TYPE (this_type) = die_type (die, cu);
target_type = die_type (die, cu);
if (target_type != this_type)
TYPE_TARGET_TYPE (this_type) = target_type;
else
{
/* Self-referential typedefs are, it seems, not allowed by the DWARF
spec and cause infinite loops in GDB. */
complaint (&symfile_complaints,
_("Self-referential DW_TAG_typedef "
"- DIE at 0x%x [in module %s]"),
die->offset, cu->objfile->name);
TYPE_TARGET_TYPE (this_type) = NULL;
}
return this_type;
}