2012-01-04 08:17:56 +00:00
|
|
|
# Copyright 2008-2012 Free Software Foundation, Inc.
|
2008-01-03 13:15:43 +00:00
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
|
|
# (at your option) any later version.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
load_lib "ada.exp"
|
|
|
|
|
|
|
|
set testdir "arrayptr"
|
|
|
|
set testfile "${testdir}/foo"
|
|
|
|
set srcfile ${srcdir}/${subdir}/${testfile}.adb
|
|
|
|
set binfile ${objdir}/${subdir}/${testfile}
|
|
|
|
|
|
|
|
file mkdir ${objdir}/${subdir}/${testdir}
|
|
|
|
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
|
|
|
|
return -1
|
|
|
|
}
|
|
|
|
|
[testsuite/gdb.ada] simplify some testcases by using clean_restart.
gdb/testsuite/ChangeLog:
* gdb.ada/array_bounds.exp, gdb.ada/array_return.exp,
gdb.ada/array_subscript_addr.exp, gdb.ada/arrayidx.exp,
gdb.ada/arrayparam.exp, gdb.ada/arrayptr.exp,
gdb.ada/atomic_enum.exp, gdb.ada/call_pn.exp,
gdb.ada/catch_ex.exp, gdb.ada/char_param.exp,
gdb.ada/complete.exp, gdb.ada/exprs.exp, gdb.ada/fixed_cmp.exp,
gdb.ada/fixed_points.exp, gdb.ada/formatted_ref.exp,
gdb.ada/frame_args.exp, gdb.ada/fun_addr.exp,
gdb.ada/fun_in_declare.exp, gdb.ada/funcall_param.exp,
gdb.ada/homonym.exp, gdb.ada/int_deref.exp,
gdb.ada/interface.exp, gdb.ada/lang_switch.exp,
gdb.ada/mod_from_name.exp, gdb.ada/nested.exp,
gdb.ada/null_array.exp, gdb.ada/null_record.exp,
gdb.ada/packed_array.exp, gdb.ada/packed_tagged.exp,
gdb.ada/print_chars.exp, gdb.ada/print_pc.exp,
gdb.ada/ptype_field.exp, gdb.ada/ptype_tagged_param.exp,
gdb.ada/rec_return.exp, gdb.ada/ref_param.exp,
gdb.ada/ref_tick_size.exp, gdb.ada/start.exp,
gdb.ada/str_ref_cmp.exp, gdb.ada/sym_print_name.exp,
gdb.ada/taft_type.exp, gdb.ada/tagged.exp, gdb.ada/tasks.exp,
gdb.ada/tick_last_segv.exp, gdb.ada/type_coercion.exp,
gdb.ada/uninitialized_vars.exp,
gdb.ada/variant_record_packed_array.exp, gdb.ada/watch_arg.exp:
Simplify by using clean_restart.
2011-01-06 10:35:00 +00:00
|
|
|
clean_restart ${testfile}
|
2008-01-03 13:15:43 +00:00
|
|
|
|
|
|
|
set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
|
|
|
|
if ![runto "foo.adb:$bp_location" ] then {
|
|
|
|
perror "Couldn't run ${testfile}"
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
gdb_test "print string_p" \
|
* gdb.ada/array_bounds.exp, gdb.ada/array_subscript_addr.exp,
gdb.ada/arrayidx.exp, gdb.ada/arrayparam.exp, gdb.ada/arrayptr.exp,
gdb.ada/assign_1.exp, gdb.ada/boolean_expr.exp,
gdb.ada/char_param.exp, gdb.ada/exprs.exp, gdb.ada/fixed_cmp.exp,
gdb.ada/fixed_points.exp, gdb.ada/fun_addr.exp,
gdb.ada/funcall_param.exp, gdb.ada/homonym.exp,
gdb.ada/interface.exp, gdb.ada/null_array.exp,
gdb.ada/packed_array.exp, gdb.ada/packed_tagged.exp,
gdb.ada/print_chars.exp, gdb.ada/print_pc.exp,
gdb.ada/str_ref_cmp.exp, gdb.ada/sym_print_name.exp,
gdb.ada/taft_type.exp, gdb.ada/tagged.exp, gdb.ada/type_coercion.exp:
Include the "= " sequence in the expected output of print tests.
2008-09-10 17:11:11 +00:00
|
|
|
"= \\(foo\\.string_access\\) 0x\[0-9a-zA-Z\]+" \
|
2008-01-03 13:15:43 +00:00
|
|
|
"print string_p"
|
|
|
|
|
2011-04-01 17:03:52 +00:00
|
|
|
gdb_test "print string_p (3..4)" "= \"ll\""
|
|
|
|
|
2010-12-29 08:02:59 +00:00
|
|
|
gdb_test "print null_string" "= \\(foo\\.string_access\\) 0x0"
|
2011-04-01 17:03:52 +00:00
|
|
|
|
|
|
|
gdb_test "print arr_ptr" "= \\(access foo\\.little_array\\) 0x\[0-9a-zA-Z\]+"
|
|
|
|
|
|
|
|
gdb_test "print arr_ptr (2)" "= 22"
|
|
|
|
|
|
|
|
gdb_test "print arr_ptr (3..4)" "= \\(3 => 23, 24\\)"
|
|
|
|
|
variables whose type is a typedef to an array pointer
If we declare a type as being an access to array type, and then
declare a variable of that type, for instance:
type Some_Array is array [...];
type Array_Access is access all Some_Array;
Table : Array_Access := [...];
The variable "Table" may be defined in the debugging information
as being a typedef to the array pointer type. In the past, it was
defined directly as the array pointer type, but this has been changed
to make sure that the typedef type gets used.
If the typedef type wasn't used, it would allow the compiler to stop
emitting that typedef type when compiling with
-feliminate-unused-debug-types. The removal of this typedef would
be a problem, because GDB relies on the typedef to create symbols
for pointer types, and without it, we would no longer be able to
do "ptype array_access".
This patch helps prevent incorrect output or even crashes when that
extra typedef layer is used.
The testing is already mostly covered by arrayptr.exp, but I still
added a 'ptype' test, just for good measure.
gdb/ChangeLog: (Eric Botcazou)
* ada-lang.c (thin_descriptor_type): Deal with typedefs.
(decode_constrained_packed_array): Likewise.
(ada_evaluate_subexp) <TERNOP_SLICE>: Likewise.
gdb/testsuite/ChangeLog (Joel Brobecker):
* gdb.ada/arrayptr.exp: Add ptype test.
2011-07-01 18:25:49 +00:00
|
|
|
gdb_test "ptype string_access" "= access array \\(<>\\) of character"
|
|
|
|
|