Files
binutils-gdb/gdb/testsuite/gdb.ada/enum_idx_packed/pck.ads
Tom Tromey a7400e443c Fix decoding of multi-dimensional constrained packed arrays
Printing a multi-dimensional constrained packed array in Ada would not
show the correct values.  The bug here is that, when decoding the type
of such an array, only the innermost dimension's element bitsize would
be correct.  For outer dimensions, the bitsize must account for the
size of each sub-array, but this was not done.

This patch fixes the problem by arranging to compute these sizes after
decoding the array type.  I've included a bit more test case than is
strictly necessary -- the current test here was derived from an
internal test, and this patch brings the two into sync.

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

	* ada-lang.c (recursively_update_array_bitsize): New function.
	(decode_constrained_packed_array_type): Call it.

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

	* gdb.ada/enum_idx_packed.exp: Add tests.
	* gdb.ada/enum_idx_packed/foo.adb: Add variables.
	* gdb.ada/enum_idx_packed/pck.adb: Add functions.
	* gdb.ada/enum_idx_packed/pck.ads: Add types, function
	declarations.
2020-11-04 08:49:17 -07:00

48 lines
1.8 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 System;
package Pck is
type Color is (Black, Red, Green, Blue, White);
type Strength is (None, Low, Medium, High);
type Full_Table is array (Color) of Boolean;
pragma Pack (Full_Table);
subtype Primary_Color is Color range Red .. Blue;
type Primary_Table is array (Primary_Color) of Boolean;
pragma Pack (Primary_Table);
type Cold_Color is new Color range Green .. Blue;
type Cold_Table is array (Cold_Color) of Boolean;
pragma Pack (Cold_Table);
type Small_Table is array (Color range <>) of Boolean;
pragma Pack (Small_Table);
function New_Small_Table (Low: Color; High: Color) return Small_Table;
type Multi_Table is array (Color range <>, Strength range <>) of Boolean;
pragma Pack (Multi_Table);
function New_Multi_Table (Low, High: Color; LS, HS: Strength)
return Multi_Table;
type Multi_Multi_Table is array (Positive range <>, Positive range <>, Positive range <>) of Boolean;
pragma Pack (Multi_Multi_Table);
function New_Multi_Multi_Table (L1, H1, L2, H2, L3, H3: Positive)
return Multi_Multi_Table;
procedure Do_Nothing (A : System.Address);
end Pck;