| package OCONST4 is |
| |
| type bit is (zero, one); |
| type u2 is mod 2**2; |
| type u5 is mod 2**5; |
| type u8 is mod 2**8; |
| |
| type Base is record |
| f1 : bit; |
| f2 : u2; |
| f3 : u5; |
| f4 : u8; |
| end record; |
| |
| for Base use record |
| f1 at 0 range 0 .. 0; |
| f2 at 0 range 1 .. 2; |
| f3 at 0 range 3 .. 7; |
| f4 at 1 range 0 .. 7; |
| end record; |
| |
| type Derived is record |
| f1 : u5; |
| b : Base; |
| f2 : bit; |
| f3 : u2; |
| f4 : u8; |
| i1 : Integer; |
| i2 : Integer; |
| end record; |
| |
| for Derived use record |
| f1 at 0 range 0 .. 4; |
| b at 0 range 5 .. 20; -- unaligned HImode bitfield |
| f2 at 0 range 21 .. 21; |
| f3 at 0 range 22 .. 23; |
| f4 at 0 range 24 .. 31; |
| i1 at 4 range 0 .. 31; |
| i2 at 8 range 0 .. 31; |
| end record; |
| |
| type R is record |
| u : u8; |
| d : Derived; |
| end record; |
| |
| for R use record |
| u at 0 range 0 .. 7; |
| d at 1 range 0 .. 95; -- BLKmode bitfield |
| end record; |
| |
| My_R : constant R := (u=>1, |
| d=>(f1=>17, |
| b=>(f1=>one, |
| f2=>2, |
| f3=>17, |
| f4=>42), |
| f2=>one, |
| f3=>1, |
| f4=>111, |
| i1=>2, |
| i2=>3)); |
| |
| procedure check (arg : R); |
| |
| end; |