diff options
Diffstat (limited to 'gdb/ada-lang.c')
-rw-r--r-- | gdb/ada-lang.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 9544758..e268eba 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -2406,6 +2406,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr, else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj)) { v = value_at (type, value_address (obj)); + type = value_type (v); bytes = (unsigned char *) alloca (len); read_memory (value_address (v) + offset, bytes, len); } @@ -7888,6 +7889,7 @@ ada_template_to_fixed_record_type_1 (struct type *type, size first before creating the value. */ check_size (rtype); dval = value_from_contents_and_address (rtype, valaddr, address); + rtype = value_type (dval); } else dval = dval0; @@ -7990,7 +7992,10 @@ ada_template_to_fixed_record_type_1 (struct type *type, off = TYPE_FIELD_BITPOS (rtype, variant_field); if (dval0 == NULL) - dval = value_from_contents_and_address (rtype, valaddr, address); + { + dval = value_from_contents_and_address (rtype, valaddr, address); + rtype = value_type (dval); + } else dval = dval0; @@ -8131,7 +8136,10 @@ to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr, return type; if (dval0 == NULL) - dval = value_from_contents_and_address (type, valaddr, address); + { + dval = value_from_contents_and_address (type, valaddr, address); + type = value_type (dval); + } else dval = dval0; @@ -8429,6 +8437,7 @@ ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr, value_from_contents_and_address (fixed_record_type, valaddr, address); + fixed_record_type = value_type (obj); if (real_type != NULL) return to_fixed_record_type (real_type, NULL, |