8sa1-binutils-gdb/gdb/testsuite/gdb.ada/enum_idx_packed/foo.adb
Tom Tromey 10f6a3add6 Only use stride for final element type
A DWARF array type may specify a stride.  Currently, the DWARF reader
applies this stride to every dimension of an array.  However, this
seems incorrect to me -- only the innermost array ought to use the
stride, while outer arrays should compute a stride based on the size
of the inner arrays.  This patch arranges to apply the stride only to
the innermost array type.  This fixes a bug noticed when running some
Ada tests with -fgnat-encodings=minimal.

gdb/ChangeLog
2020-11-04  Tom Tromey  <tromey@adacore.com>

	* dwarf2/read.c (read_array_type): Only apply stride to innermost
	array.

gdb/testsuite/ChangeLog
2020-11-04  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/enum_idx_packed.exp: Add test.
	* gdb.ada/enum_idx_packed/foo.adb (Multi_Access):
	New variable.
	* gdb.ada/enum_idx_packed/pck.ads (Short)
	(Multi_Dimension, Multi_Dimension_Access): New types.
2020-11-04 08:49:18 -07:00

38 lines
1.5 KiB
Ada

-- Copyright 2012-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/>.
with Pck; use Pck;
procedure Foo is
Full : Full_Table := (False, True, False, True, False);
Primary : Primary_Table := (False, True, False);
Cold : Cold_Table := (False, True);
Small : Small_Table := New_Small_Table (Low => Red, High => Green);
Multi : Multi_Table := New_Multi_Table (Red, Green, Low, Medium);
Multi_Multi : Multi_Multi_Table := New_Multi_Multi_Table (1, 2, 1, 7, 1, 10);
Multi_Access : Multi_Dimension_Access
:= new Multi_Dimension'(True => (1, 1, 2, 3, 5),
False => (8, 13, 21, 34, 55));
begin
Do_Nothing (Full'Address); -- STOP
Do_Nothing (Primary'Address);
Do_Nothing (Cold'Address);
Do_Nothing (Small'Address);
Do_Nothing (Multi'Address);
Do_Nothing (Multi_Multi'Address);
Do_Nothing (Multi_Access'Address);
end Foo;