+2011-02-17 Joel Brobecker <brobecker@adacore.com>
+
+ * ada-lang.c (ada_type_of_array): Fix the size of the array
+ in the case of an unconstrained packed array.
+
2011-02-17 Yao Qi <yao@codesourcery.com>
* common/Makefile.in: Add more targets for make.
elt_type = create_array_type (array_type, elt_type, range_type);
if (ada_is_unconstrained_packed_array_type (value_type (arr)))
- TYPE_FIELD_BITSIZE (elt_type, 0) =
- decode_packed_array_bitsize (value_type (arr));
+ {
+ /* We need to store the element packed bitsize, as well as
+ recompute the array size, because it was previously
+ computed based on the unpacked element size. */
+ LONGEST lo = value_as_long (low);
+ LONGEST hi = value_as_long (high);
+
+ TYPE_FIELD_BITSIZE (elt_type, 0) =
+ decode_packed_array_bitsize (value_type (arr));
+ /* If the array has no element, then the size is already
+ zero, and does not need to be recomputed. */
+ if (lo < hi)
+ {
+ int array_bitsize =
+ (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
+
+ TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
+ }
+ }
}
return lookup_pointer_type (elt_type);
+2011-02-17 Joel Brobecker <brobecker@adacore.com>
+
+ * gdb.ada/packed_array: Expand testcase to test printing of
+ unconstrained packed array.
+
2011-02-17 Joel Brobecker <brobecker@adacore.com>
* gdb.dwarf2/dw2-ranges.exp: Simplify using clean_restart.
gdb_test "print &var" \
"= \\(access array \\(\\.\\.\\.\\) of boolean\\) \\(4 => true, false, true, false, true\\)" \
"print &var"
+
+# Print the value of U_Var, an unconstrainted packed array.
+
+gdb_test "print u_var" \
+ "= \\(true, false, false, true, true, false\\)"
+
-- 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;
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;
--- /dev/null
+-- Copyright (C) 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/>.
+
+package body Pck is
+ function Ident (I : Integer) return Integer is
+ begin
+ return I;
+ end Ident;
+end Pck;
--- /dev/null
+-- Copyright (C) 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/>.
+
+package Pck is
+ function Ident (I : Integer) return Integer;
+end Pck;