e6c2c623f7
Compilers can materialize renamings of arrays (or of accesses to arrays) in Ada into variables whose types are references to the actual array types. Before this change, trying to use such an array renaming yielded an error in GDB: (gdb) print my_array(1) cannot subscript or call a record (gdb) print my_array_ptr(1) cannot subscript or call something of type `(null)' This behavior comes from bad handling for array renamings, in particular the OP_FUNCALL expression operator handling from ada-lang.c (ada_evaluate_subexp): in one place we turn the reference into a pointer, but the code that follows expect the value to be an array. This patch fixes how we handle references in call/subscript evaluation so that we turn these references into the actual array values instead of pointers to them. gdb/ChangeLog: * ada-lang.c (ada_evaluate_subexp) <OP_FUNCALL>: When the input value is a reference, actually dereference it in order to get the underlying value. gdb/testsuite/ChangeLog: * gdb.ada/array_ptr_renaming.exp: New testcase. * gdb.ada/array_ptr_renaming/foo.adb: New file. * gdb.ada/array_ptr_renaming/pack.ads: New file. Tested on x86_64-linux, no regression.
25 lines
977 B
Ada
25 lines
977 B
Ada
-- Copyright 2015 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/>.
|
|
|
|
package Pack is
|
|
|
|
type Table_Type is
|
|
array (Natural range <>) of Integer;
|
|
type Table_Ptr_Type is access all Table_Type;
|
|
|
|
Table : Table_Type := (1 => 10, 2 => 20);
|
|
Table_Ptr : aliased Table_Ptr_Type := new Table_Type'(3 => 30, 4 => 40);
|
|
|
|
end Pack;
|