1-- { dg-do run }
2-- { dg-options "-O" }
3
4procedure Opt73 is
5
6   type Terminal_Set_Indexed_By_Non_Terminal is
7     array (Natural range <>, Natural  range <>) of Boolean with Pack;
8
9   type Terminal_Set_Per_Non_Terminal
10     (Last_Terminal     : Natural;
11      Last_Non_Terminal : Natural) is
12   record
13      Map : Terminal_Set_Indexed_By_Non_Terminal
14        (1 .. Last_Non_Terminal, 0 .. Last_Terminal);
15   end record;
16
17   Follow : Terminal_Set_Per_Non_Terminal (5, 4);
18   Expect : Terminal_Set_Per_Non_Terminal :=
19     (5, 4, (1 => (2 => True, others => False),
20             others => (others => False)));
21
22   procedure Get_Follow (Value : out Terminal_Set_Per_Non_Terminal) is
23   begin
24      Value.Map := (others => (others => False));
25      Value.Map (1, 2) := True;
26      Value.Map (2, 0) := Value.Map (2, 0) or Value.Map (1, 0);
27   end;
28
29begin
30   Get_Follow (Follow);
31   if Follow /= Expect then
32      raise Program_Error;
33   end if;
34end;
35