-- { dg-do run } with Interfaces; procedure Pack24 is type Enum_1 is (Lit_1); for Enum_1'SIZE use 16; type Rec1(D1 : Enum_1 := Lit_1) is record case D1 is when Lit_1 => F1 : Interfaces.Unsigned_16; when others => Null; end case; end record; pragma Pack(Rec1); type Rec2 is record F1 : Interfaces.Unsigned_16; F2 : Rec1; end record; pragma Pack(Rec2); type Rec3 is record F1 : Interfaces.Unsigned_8; F2 : Rec2; end record; pragma Pack(Rec3); begin if Rec3'Size /= 56 then raise Program_Error; end if; end;