Avoid crash in resolve_dynamic_struct

resolve_dynamic_struct says:

  gdb_assert (type->num_fields () > 0);

However, a certain Ada program has a structure with no fields but with
a dynamic size, causing this assertion to fire.

It is difficult to be certain, but we think this is a compiler bug.
However, in the meantime this assertion does not seem to be checking
any kind of internal consistency; so this patch removes it.

gdb/ChangeLog
2021-02-09  Tom Tromey  <tromey@adacore.com>

	* gdbtypes.c (resolve_dynamic_struct): Handle structure with no
	fields.
This commit is contained in:
Tom Tromey 2021-02-09 12:15:39 -07:00
parent 5f128a25f2
commit a4f0544b1b
2 changed files with 9 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2021-02-09 Tom Tromey <tromey@adacore.com>
* gdbtypes.c (resolve_dynamic_struct): Handle structure with no
fields.
2021-02-08 Shahab Vahedi <shahab@synopsys.com>
PR tdep/27369

View File

@ -2545,7 +2545,6 @@ resolve_dynamic_struct (struct type *type,
unsigned resolved_type_bit_length = 0;
gdb_assert (type->code () == TYPE_CODE_STRUCT);
gdb_assert (type->num_fields () > 0);
resolved_type = copy_type (type);
@ -2564,9 +2563,10 @@ resolve_dynamic_struct (struct type *type,
((struct field *)
TYPE_ALLOC (resolved_type,
resolved_type->num_fields () * sizeof (struct field)));
memcpy (resolved_type->fields (),
type->fields (),
resolved_type->num_fields () * sizeof (struct field));
if (type->num_fields () > 0)
memcpy (resolved_type->fields (),
type->fields (),
resolved_type->num_fields () * sizeof (struct field));
}
for (i = 0; i < resolved_type->num_fields (); ++i)