1-- { dg-do run }
2
3procedure Rep_Clause4 is
4
5  type U32 is mod 2 ** 32;
6
7  type Key is record
8    Value : U32;
9    Valid : Boolean;
10  end record;
11
12  type Key_Buffer is record
13    Current, Latch : Key;
14  end record;
15
16  type Block is record
17    Keys  : Key_Buffer;
18    Stamp : U32;
19  end record;
20  for Block use record
21    Keys  at  0 range 0 .. 103;
22    Stamp at 13 range 0 .. 31;
23  end record;
24
25  My_Block : Block;
26  My_Stamp : constant := 16#01234567#;
27
28begin
29  My_Block.Stamp := My_Stamp;
30  My_Block.Keys.Latch := My_Block.Keys.Current;
31  if My_Block.Stamp /= My_Stamp then
32    raise Program_Error;
33  end if;
34end;
35