1-- { dg-do run }
2
3procedure Pack19 is
4
5   subtype Always_False is Boolean range False .. False;
6
7   type Rec1 is record
8      B1 : Boolean;
9      B2 : Boolean;
10      B3 : Boolean;
11      B4 : Boolean;
12      B5 : Boolean;
13      B6 : Boolean;
14      B7 : Always_False;
15      B8 : Boolean;
16   end record;
17   pragma Pack (Rec1);
18
19   subtype Always_True is Boolean range True .. True;
20
21   type Rec2 is record
22      B1 : Boolean;
23      B2 : Boolean;
24      B3 : Boolean;
25      B4 : Boolean;
26      B5 : Boolean;
27      B6 : Boolean;
28      B7 : Always_True;
29      B8 : Boolean;
30   end record;
31   pragma Pack (Rec2);
32
33   R1 : Rec1 := (True, True, True, True, True, True, False, False);
34   R2 : Rec2 := (False, False, False, False, False, False, True, True);
35
36begin
37   R1.B8 := True;
38   if R1.B7 /= False then
39      raise Program_Error;
40   end if;
41
42   R1.B7 := False;
43   if R1.B7 /= False then
44      raise Program_Error;
45   end if;
46
47   R2.B8 := False;
48   if R2.B7 /= True then
49      raise Program_Error;
50   end if;
51
52   R2.B7 := True;
53   if R2.B7 /= True then
54      raise Program_Error;
55   end if;
56end;
57