mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-24 12:35:55 +08:00
02c6f3f1fc
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.
58 lines
1.6 KiB
Plaintext
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"
|
|
}
|