binutils-gdb/gdb/testsuite/gdb.ada/mi_var_array.exp
Tom Tromey 02c6f3f1fc Do not auto-dereference null pointers in Ada MI varobj
The Ada varobj code automatically dereferences access types.  This is
often handy, but it also does so for null pointers -- showing children
with empty values.

These children are weird, but even weirder when a variant type is
involved, because only the non-varying parts of the type are
displayed.  This behavior conflicts a bit with my ongoing quest to
move the Ada code to use DWARF rather than gnat encodings, in that
reproducing this behavior with the DWARF code seems rather hacky.

So, this patch instead changes the Ada varobj code so that it does not
automatically dereference null pointers.

As this patch only affects Ada, and it was already reviewed internally
by Joel, I am checking it in.

2020-09-02  Tom Tromey  <tromey@adacore.com>

	* ada-varobj.c (ada_varobj_get_ptr_number_of_children): Return 0
	for null pointers.
	(ada_varobj_adjust_for_child_access): Special-case null pointers.

gdb/testsuite/ChangeLog
2020-09-02  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/mi_var_access.exp: Test children of access variable.
	* gdb.ada/mi_var_access/mi_access.adb: Add new stop markers.
	* gdb.ada/mi_var_array.exp: Update.
2020-09-02 11:30:51 -06:00

58 lines
1.6 KiB
Plaintext

# Copyright 2015-2020 Free Software Foundation, Inc.
#
# 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"
if { [skip_ada_tests] } { return -1 }
standard_ada_testfile bar
load_lib mi-support.exp
set MIFLAGS "-i=mi"
foreach_with_prefix scenario {none all minimal} {
set flags {debug}
if {$scenario != "none"} {
lappend flags additional_flags=-fgnat-encodings=$scenario
}
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != "" } {
return -1
}
gdb_exit
if [mi_gdb_start] {
continue
}
mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}
if ![mi_run_to_main] then {
fail "cannot run to main, testcase aborted"
return 0
}
set bp_location [gdb_get_line_number "STOP" ${testdir}/bar.adb]
mi_continue_to_line \
"bar.adb:$bp_location" \
"stop at start of main Ada procedure"
mi_gdb_test "-var-create vta * vta" \
"\\^done,name=\"vta\",numchild=\"0\",.*" \
"create bt varobj"
}