aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gnat.dg/opt73.adb
blob: 38ab4774fb77f38481e3e80fc6cca3988abf45bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
-- { dg-do run }
-- { dg-options "-O" }

procedure Opt73 is

   type Terminal_Set_Indexed_By_Non_Terminal is
     array (Natural range <>, Natural  range <>) of Boolean with Pack;

   type Terminal_Set_Per_Non_Terminal
     (Last_Terminal     : Natural;
      Last_Non_Terminal : Natural) is
   record
      Map : Terminal_Set_Indexed_By_Non_Terminal
        (1 .. Last_Non_Terminal, 0 .. Last_Terminal);
   end record;

   Follow : Terminal_Set_Per_Non_Terminal (5, 4);
   Expect : Terminal_Set_Per_Non_Terminal :=
     (5, 4, (1 => (2 => True, others => False),
             others => (others => False)));

   procedure Get_Follow (Value : out Terminal_Set_Per_Non_Terminal) is
   begin
      Value.Map := (others => (others => False));
      Value.Map (1, 2) := True;
      Value.Map (2, 0) := Value.Map (2, 0) or Value.Map (1, 0);
   end;

begin
   Get_Follow (Follow);
   if Follow /= Expect then
      raise Program_Error;
   end if;
end;