| -- { dg-do run } |
| -- { dg-options "-O2 -gnatp" } |
| |
| procedure Bit_Packed_Array3 is |
| |
| type Bitmap_T is array (1 .. 10) of Boolean; |
| pragma Pack (Bitmap_T); |
| |
| type Maps_T is record |
| M1 : Bitmap_T; |
| end record; |
| pragma Pack (Maps_T); |
| for Maps_T'Size use 10; |
| pragma Suppress_Initialization (Maps_T); |
| |
| Tmap : constant Bitmap_T := (others => True); |
| Fmap : constant Bitmap_T := (others => False); |
| Amap : constant Bitmap_T := |
| (1 => False, 2 => True, 3 => False, 4 => True, 5 => False, |
| 6 => True, 7 => False, 8 => True, 9 => False, 10 => True); |
| |
| function Some_Maps return Maps_T is |
| Value : Maps_T := (M1 => Amap); |
| begin |
| return Value; |
| end; |
| pragma Inline (Some_Maps); |
| |
| Maps : Maps_T; |
| begin |
| Maps := Some_Maps; |
| |
| for I in Maps.M1'Range loop |
| if (I mod 2 = 0 and then not Maps.M1 (I)) |
| or else (I mod 2 /= 0 and then Maps.M1 (I)) |
| then |
| raise Program_Error; |
| end if; |
| end loop; |
| end; |