1--  { dg-do run }
2
3with Interfaces;
4
5procedure Pack24 is
6
7   type Enum_1 is (Lit_1);
8   for Enum_1'SIZE use 16;
9
10   type Rec1(D1 : Enum_1 := Lit_1) is
11      record
12         case D1 is
13         when Lit_1 =>
14            F1 : Interfaces.Unsigned_16;
15         when others =>
16            Null;
17         end case;
18      end record;
19   pragma Pack(Rec1);
20
21   type Rec2 is
22      record
23         F1 : Interfaces.Unsigned_16;
24         F2 : Rec1;
25   end record;
26   pragma Pack(Rec2);
27
28   type Rec3 is record
29      F1 : Interfaces.Unsigned_8;
30      F2 : Rec2;
31   end record;
32   pragma Pack(Rec3);
33
34begin
35  if Rec3'Size /= 56 then
36    raise Program_Error;
37  end if;
38end;
39