mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-29 08:24:05 +08:00
Fix regression in variant part handling
My series to change DWARF attribute handling to be type-safe introduced a regression in gdb.ada/variant.exp. handle_variant was using as_unsigned on an attribute with DW_FORM_sdata. This patch changes it to use constant_value instead. 2020-09-30 Tom Tromey <tromey@adacore.com> * dwarf2/read.c (handle_variant): Use constant_value.
This commit is contained in:
@ -1,3 +1,7 @@
|
|||||||
|
2020-09-30 Tom Tromey <tromey@adacore.com>
|
||||||
|
|
||||||
|
* dwarf2/read.c (handle_variant): Use constant_value.
|
||||||
|
|
||||||
2020-09-29 Tom Tromey <tom@tromey.com>
|
2020-09-29 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* dwarf2/read.c (lookup_dwo_id, get_type_unit_group)
|
* dwarf2/read.c (lookup_dwo_id, get_type_unit_group)
|
||||||
|
@ -16178,7 +16178,7 @@ handle_variant (struct die_info *die, struct type *type,
|
|||||||
/* In a variant we want to get the discriminant and also add a
|
/* In a variant we want to get the discriminant and also add a
|
||||||
field for our sole member child. */
|
field for our sole member child. */
|
||||||
struct attribute *discr = dwarf2_attr (die, DW_AT_discr_value, cu);
|
struct attribute *discr = dwarf2_attr (die, DW_AT_discr_value, cu);
|
||||||
if (discr == nullptr)
|
if (discr == nullptr || !discr->form_is_constant ())
|
||||||
{
|
{
|
||||||
discr = dwarf2_attr (die, DW_AT_discr_list, cu);
|
discr = dwarf2_attr (die, DW_AT_discr_list, cu);
|
||||||
if (discr == nullptr || discr->as_block ()->size == 0)
|
if (discr == nullptr || discr->as_block ()->size == 0)
|
||||||
@ -16187,7 +16187,7 @@ handle_variant (struct die_info *die, struct type *type,
|
|||||||
variant.discr_list_data = discr->as_block ();
|
variant.discr_list_data = discr->as_block ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
variant.discriminant_value = discr->as_unsigned ();
|
variant.discriminant_value = discr->constant_value (0);
|
||||||
|
|
||||||
for (die_info *variant_child = die->child;
|
for (die_info *variant_child = die->child;
|
||||||
variant_child != NULL;
|
variant_child != NULL;
|
||||||
|
Reference in New Issue
Block a user