e67ad678a1
When ada-lang transforms an array descriptor type (an XUP structure) into an array type, the size of the array type is computed by using the element size, and multiplying it by the number of elements in that array. This does not work, however, for packed arrays, where the *packed* size in bits needs to be used. This usually does not cause any problem, because we end up reading more memory than needed. However, we have observed on LynxOS a memory error while trying to read the entire array, because the larger-than-needed read tried to read past the end of the stack into inaccessible memory. This patch fixes the problem by correctly computing the array size in bytes in the case of packed arrays. gdb/ChangeLog: * ada-lang.c (ada_type_of_array): Fix the size of the array in the case of an unconstrained packed array. gdb/testsuite/ChangeLog: * gdb.ada/packed_array: Expand testcase to test printing of unconstrained packed array.
39 lines
1.2 KiB
Ada
39 lines
1.2 KiB
Ada
-- Copyright 2005, 2007, 2008, 2009, 2010, 2011
|
|
-- 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 PA is
|
|
|
|
type Packed_Array is array (4 .. 8) of Boolean;
|
|
pragma pack (Packed_Array);
|
|
|
|
Var : Packed_Array;
|
|
|
|
-- Unconstrained packed array (bounds are dynamic).
|
|
type Unconstrained_Packed_Array is array (Integer range <>) of Boolean;
|
|
|
|
U_Var : Unconstrained_Packed_Array (1 .. Ident (6));
|
|
|
|
begin
|
|
|
|
Var := (True, False, True, False, True);
|
|
U_Var := (True, False, False, True, True, False);
|
|
|
|
Var (8) := False; -- STOP
|
|
U_Var (U_Var'Last) := True;
|
|
|
|
end PA;
|