-- { dg-do compile } package Atomic3 is type Four_Bits is mod 2**4; type Fourteen_Bits is mod 2**14; type Twenty_Eight_Bits is mod 2**28; type Rec1 (Mode : Boolean := True) is record Reserved : Four_Bits; case Mode is when True => High_Part : Fourteen_Bits; Low_Part : Fourteen_Bits; when False => Data : Twenty_Eight_Bits; end case; end record; for Rec1 use record Reserved at 0 range 28 .. 31; High_Part at 0 range 14 .. 27; Low_Part at 0 range 0 .. 13; Data at 0 range 0 .. 27; end record; for Rec1'Size use 32; pragma Unchecked_Union (Rec1); type Rec2 is record A : Rec1; pragma Atomic (A); end record; end Atomic3;