* ada-lang.c (ada_which_variant_applies): Correctly compute
authorJoel Brobecker <brobecker@gnat.com>
Sat, 5 Jan 2008 15:44:53 +0000 (15:44 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Sat, 5 Jan 2008 15:44:53 +0000 (15:44 +0000)
        the value of the discriminant when the variant record is packed.

gdb/ChangeLog
gdb/ada-lang.c

index acdbc1e79a89609703a430a86d4874caa12bd709..435f2c15e963639d39cfc254ec2f44599b27c75d 100644 (file)
@@ -1,3 +1,8 @@
+2008-01-05  Joel Brobecker  <brobecker@adacore.com>
+
+       * 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  <brobecker@adacore.com>
 
        * ada-lang.c (is_name_suffix): Handle middle-name numeric suffixes
index 6e3e6a30dafbc35e9a8c9ea77ac6b792c1a306c0..a689b2e04959a7c01662da2a21c6d51ea99fb772 100644 (file)
@@ -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)