aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/ada-lang.c15
-rw-r--r--gdb/testsuite/ChangeLog4
-rw-r--r--gdb/testsuite/gdb.ada/arrayptr.exp2
4 files changed, 20 insertions, 7 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 87832cf..699b40c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2011-07-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ * ada-lang.c (thin_descriptor_type): Deal with typedefs.
+ (decode_constrained_packed_array): Likewise.
+ (ada_evaluate_subexp) <TERNOP_SLICE>: Likewise.
+
2011-07-01 Joel Brobecker <brobecker@adacore.com>
* ada-exp.y (convert_char_literal): Handle typedef types.
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 4f6e161..3e30c9e 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -1443,7 +1443,7 @@ thin_descriptor_type (struct type *type)
static struct value *
thin_data_pntr (struct value *val)
{
- struct type *type = value_type (val);
+ struct type *type = ada_check_typedef (value_type (val));
struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
data_type = lookup_pointer_type (data_type);
@@ -2093,7 +2093,7 @@ decode_constrained_packed_array (struct value *arr)
of the routine assumes that the array hasn't been decoded yet,
so we use the basic "value_ind" routine to perform the dereferencing,
as opposed to using "ada_value_ind". */
- if (TYPE_CODE (value_type (arr)) == TYPE_CODE_PTR)
+ if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
arr = value_ind (arr);
type = decode_constrained_packed_array_type (value_type (arr));
@@ -9522,16 +9522,17 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
if (!ada_is_simple_array_type (value_type (array)))
error (_("cannot take slice of non-array"));
- if (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR)
+ if (TYPE_CODE (ada_check_typedef (value_type (array)))
+ == TYPE_CODE_PTR)
{
+ struct type *type0 = ada_check_typedef (value_type (array));
+
if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
- return empty_array (TYPE_TARGET_TYPE (value_type (array)),
- low_bound);
+ return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
else
{
struct type *arr_type0 =
- to_fixed_array_type (TYPE_TARGET_TYPE (value_type (array)),
- NULL, 1);
+ to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
return ada_value_slice_from_ptr (array, arr_type0,
longest_to_int (low_bound),
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index a27a8bd..1dc763d 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2011-07-01 Joel Brobecker <brobecker@adacore.com>
+ * gdb.ada/arrayptr.exp: Add ptype test.
+
+2011-07-01 Joel Brobecker <brobecker@adacore.com>
+
* gdb.ada/char_enum: New testcase.
2011-07-01 Yao Qi <yao@codesourcery.com>
diff --git a/gdb/testsuite/gdb.ada/arrayptr.exp b/gdb/testsuite/gdb.ada/arrayptr.exp
index ba30d61..9b06bc1 100644
--- a/gdb/testsuite/gdb.ada/arrayptr.exp
+++ b/gdb/testsuite/gdb.ada/arrayptr.exp
@@ -51,3 +51,5 @@ gdb_test "print arr_ptr (2)" "= 22"
gdb_test "print arr_ptr (3..4)" "= \\(3 => 23, 24\\)"
+gdb_test "ptype string_access" "= access array \\(<>\\) of character"
+