diff --git a/gdb/dwarf2/expr.c b/gdb/dwarf2/expr.c index d245bc65ef2..4aa4542d947 100644 --- a/gdb/dwarf2/expr.c +++ b/gdb/dwarf2/expr.c @@ -1005,8 +1005,8 @@ dwarf_expr_context::fetch_result (struct type *type, struct type *subobj_type, } address = value_as_address (value_from_pointer (ptr_type, address)); - retval = value_at_lazy (subobj_type, - address + subobj_offset); + retval = value_at_lazy (subobj_type, address + subobj_offset, + m_frame); if (in_stack_memory) retval->set_stack (true); } diff --git a/gdb/testsuite/gdb.ada/static-link.exp b/gdb/testsuite/gdb.ada/static-link.exp new file mode 100644 index 00000000000..86f2fb5076b --- /dev/null +++ b/gdb/testsuite/gdb.ada/static-link.exp @@ -0,0 +1,33 @@ +# Copyright 2023 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 . + +load_lib "ada.exp" + +require allow_ada_tests + +standard_ada_testfile prog + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} { + return -1 +} + +clean_restart ${testfile} + +set bp_location [gdb_get_line_number "STOP" ${testdir}/prog.adb] +if {![runto "prog.adb:$bp_location"]} { + return -1 +} + +gdb_test "ptype value" [string_to_regexp "type = array (1 .. 3) of integer"] diff --git a/gdb/testsuite/gdb.ada/static-link/pck.ads b/gdb/testsuite/gdb.ada/static-link/pck.ads new file mode 100644 index 00000000000..a37f7bb0a10 --- /dev/null +++ b/gdb/testsuite/gdb.ada/static-link/pck.ads @@ -0,0 +1,18 @@ +-- Copyright 2023 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 . + +package Pck is + Some_Value : Integer := 3; +end Pck; diff --git a/gdb/testsuite/gdb.ada/static-link/prog.adb b/gdb/testsuite/gdb.ada/static-link/prog.adb new file mode 100644 index 00000000000..a14817b7440 --- /dev/null +++ b/gdb/testsuite/gdb.ada/static-link/prog.adb @@ -0,0 +1,35 @@ +-- Copyright 2023 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 . + +with Pck; use Pck; + +procedure Prog is + + Upper : Integer := Some_Value; + Value : array (1 .. Upper) of Integer := (23, 24, 25); + + procedure Inner_Most is + begin + null; -- STOP + end; + + procedure Intermediate is + begin + Inner_Most; + end; + +begin + Intermediate; +end Prog;