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