1package OCONST4 is 2 3 type bit is (zero, one); 4 type u2 is mod 2**2; 5 type u5 is mod 2**5; 6 type u8 is mod 2**8; 7 8 type Base is record 9 f1 : bit; 10 f2 : u2; 11 f3 : u5; 12 f4 : u8; 13 end record; 14 15 for Base use record 16 f1 at 0 range 0 .. 0; 17 f2 at 0 range 1 .. 2; 18 f3 at 0 range 3 .. 7; 19 f4 at 1 range 0 .. 7; 20 end record; 21 22 type Derived is record 23 f1 : u5; 24 b : Base; 25 f2 : bit; 26 f3 : u2; 27 f4 : u8; 28 i1 : Integer; 29 i2 : Integer; 30 end record; 31 32 for Derived use record 33 f1 at 0 range 0 .. 4; 34 b at 0 range 5 .. 20; -- unaligned HImode bitfield 35 f2 at 0 range 21 .. 21; 36 f3 at 0 range 22 .. 23; 37 f4 at 0 range 24 .. 31; 38 i1 at 4 range 0 .. 31; 39 i2 at 8 range 0 .. 31; 40 end record; 41 42 type R is record 43 u : u8; 44 d : Derived; 45 end record; 46 47 for R use record 48 u at 0 range 0 .. 7; 49 d at 1 range 0 .. 95; -- BLKmode bitfield 50 end record; 51 52 My_R : constant R := (u=>1, 53 d=>(f1=>17, 54 b=>(f1=>one, 55 f2=>2, 56 f3=>17, 57 f4=>42), 58 f2=>one, 59 f3=>1, 60 f4=>111, 61 i1=>2, 62 i2=>3)); 63 64 procedure check (arg : R); 65 66end; 67