From: Joel Brobecker Date: Sat, 5 Jan 2008 15:44:53 +0000 (+0000) Subject: * ada-lang.c (ada_which_variant_applies): Correctly compute X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0c281816be864cece712922c881b4ef66283031f;p=binutils-gdb.git * ada-lang.c (ada_which_variant_applies): Correctly compute the value of the discriminant when the variant record is packed. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index acdbc1e79a8..435f2c15e96 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2008-01-05 Joel Brobecker + + * ada-lang.c (ada_which_variant_applies): Correctly compute + the value of the discriminant when the variant record is packed. + 2008-01-04 Joel Brobecker * ada-lang.c (is_name_suffix): Handle middle-name numeric suffixes diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 6e3e6a30daf..a689b2e0495 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -6284,17 +6284,16 @@ ada_which_variant_applies (struct type *var_type, struct type *outer_type, { int others_clause; int i; - int disp; - struct type *discrim_type; char *discrim_name = ada_variant_discrim_name (var_type); + struct value *outer; + struct value *discrim; LONGEST discrim_val; - disp = 0; - discrim_type = - ada_lookup_struct_elt_type (outer_type, discrim_name, 1, 1, &disp); - if (discrim_type == NULL) + outer = value_from_contents_and_address (outer_type, outer_valaddr, 0); + discrim = ada_value_struct_elt (outer, discrim_name, 1); + if (discrim == NULL) return -1; - discrim_val = unpack_long (discrim_type, outer_valaddr + disp); + discrim_val = value_as_long (discrim); others_clause = -1; for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)