diff options
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/ada-lang.c | 17 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp | 104 |
4 files changed, 125 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 82e3622..67f631d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,13 @@ 2014-09-10 Joel Brobecker <brobecker@adacore.com> + * ada-lang.c (ada_value_ptr_subscript): Remove parameter "type". + Adjust function implementation and documentation accordingly. + (ada_evaluate_subexp) <OP_FUNCALL>: Only assign "type" if + NOSIDE is EVAL_AVOID_SIDE_EFFECTS. + Update call to ada_value_ptr_subscript. + +2014-09-10 Joel Brobecker <brobecker@adacore.com> + * ada-valprint.c (ada_value_print): Use VAL's enclosing type instead of VAL's type. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 28999c7..4c6d039 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -2715,15 +2715,16 @@ ada_value_subscript (struct value *arr, int arity, struct value **ind) return elt; } -/* Assuming ARR is a pointer to a standard GDB array of type TYPE, the - value of the element of *ARR at the ARITY indices given in - IND. Does not read the entire array into memory. */ +/* Assuming ARR is a pointer to a GDB array, the value of the element + of *ARR at the ARITY indices given in IND. + Does not read the entire array into memory. */ static struct value * -ada_value_ptr_subscript (struct value *arr, struct type *type, int arity, - struct value **ind) +ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind) { int k; + struct type *type + = check_typedef (value_enclosing_type (ada_value_ind (arr))); for (k = 0; k < arity; k += 1) { @@ -10323,9 +10324,9 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp, (ada_coerce_to_simple_array (argvec[0]), nargs, argvec + 1)); case TYPE_CODE_PTR: /* Pointer to array */ - type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1); if (noside == EVAL_AVOID_SIDE_EFFECTS) { + type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1); type = ada_array_element_type (type, nargs); if (type == NULL) error (_("element type of array unknown")); @@ -10333,8 +10334,8 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp, return value_zero (ada_aligned_type (type), lval_memory); } return - unwrap_value (ada_value_ptr_subscript (argvec[0], type, - nargs, argvec + 1)); + unwrap_value (ada_value_ptr_subscript (argvec[0], + nargs, argvec + 1)); default: error (_("Attempt to index or call something other than an " diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e7bba77..ebb7e6a 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2014-09-10 Joel Brobecker <brobecker@adacore.com> + * gdb.dwarf2/dynarr-ptr.exp: Add subscripting tests. + +2014-09-10 Joel Brobecker <brobecker@adacore.com> + * gdb.dwarf2/dynarr-ptr.c: New file. * gdb.dwarf2/dynarr-ptr.exp: New file. diff --git a/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp b/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp index 501f129..1df5e3c 100644 --- a/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp +++ b/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp @@ -137,17 +137,121 @@ gdb_test_no_output "set language ada" gdb_test "print foo.three_ptr.all" \ " = \\(1, 2, 3\\)" +gdb_test "print foo.three_ptr.all(1)" \ + " = 1" + +gdb_test "print foo.three_ptr.all(2)" \ + " = 2" + +gdb_test "print foo.three_ptr.all(3)" \ + " = 3" + +# foo.three_ptr + +gdb_test "print foo.three_ptr(1)" \ + " = 1" + +gdb_test "print foo.three_ptr(2)" \ + " = 2" + +gdb_test "print foo.three_ptr(3)" \ + " = 3" + # foo.three_ptr_tdef.all gdb_test "print foo.three_ptr_tdef.all" \ " = \\(1, 2, 3\\)" +gdb_test "print foo.three_ptr_tdef.all(1)" \ + " = 1" + +gdb_test "print foo.three_ptr_tdef.all(2)" \ + " = 2" + +gdb_test "print foo.three_ptr_tdef.all(3)" \ + " = 3" + +# foo.three_ptr_tdef + +gdb_test "print foo.three_ptr_tdef(1)" \ + " = 1" + +gdb_test "print foo.three_ptr_tdef(2)" \ + " = 2" + +gdb_test "print foo.three_ptr_tdef(3)" \ + " = 3" + # foo.five_ptr.all gdb_test "print foo.five_ptr.all" \ " = \\(2 => 5, 8, 13, 21, 34\\)" +gdb_test "print foo.five_ptr.all(2)" \ + " = 5" + +gdb_test "print foo.five_ptr.all(3)" \ + " = 8" + +gdb_test "print foo.five_ptr.all(4)" \ + " = 13" + +gdb_test "print foo.five_ptr.all(5)" \ + " = 21" + +gdb_test "print foo.five_ptr.all(6)" \ + " = 34" + +# foo.five_ptr + +gdb_test "print foo.five_ptr(2)" \ + " = 5" + +gdb_test "print foo.five_ptr(3)" \ + " = 8" + +gdb_test "print foo.five_ptr(4)" \ + " = 13" + +gdb_test "print foo.five_ptr(5)" \ + " = 21" + +gdb_test "print foo.five_ptr(6)" \ + " = 34" + # foo.five_ptr_tdef.all gdb_test "print foo.five_ptr_tdef.all" \ " = \\(2 => 5, 8, 13, 21, 34\\)" + +gdb_test "print foo.five_ptr_tdef.all(2)" \ + " = 5" + +gdb_test "print foo.five_ptr_tdef.all(3)" \ + " = 8" + +gdb_test "print foo.five_ptr_tdef.all(4)" \ + " = 13" + +gdb_test "print foo.five_ptr_tdef.all(5)" \ + " = 21" + +gdb_test "print foo.five_ptr_tdef.all(6)" \ + " = 34" + +# foo.five_ptr_tdef + +gdb_test "print foo.five_ptr_tdef(2)" \ + " = 5" + +gdb_test "print foo.five_ptr_tdef(3)" \ + " = 8" + +gdb_test "print foo.five_ptr_tdef(4)" \ + " = 13" + +gdb_test "print foo.five_ptr_tdef(5)" \ + " = 21" + +gdb_test "print foo.five_ptr_tdef(6)" \ + " = 34" |