1-- { dg-do run }
2
3with Unchecked_Conversion;
4
5procedure Unchecked_Convert11 is
6
7  subtype Unsigned_Type is Integer range 2_034 .. 2_164;
8
9  subtype Signed_Type is Integer range -2048 .. 2047;
10
11  type Rec is record
12    S : Signed_Type;
13  end record;
14  pragma Pack (Rec);
15
16  function To_Signed_Type is
17     new Unchecked_Conversion (Source => Unsigned_Type, Target => Rec);
18
19  function To_Unsigned_Type is
20     new Unchecked_Conversion (Source => Rec, Target => Unsigned_Type);
21
22  Data : Unsigned_Type;
23  Temp : Rec;
24
25begin
26
27  Data := 2100;
28  Temp := To_Signed_Type (Data);
29  if Temp.S /= -1996 then
30    raise Program_Error;
31  end if;
32  Data := To_Unsigned_Type (Temp);
33  if Data /= 2100 then
34    raise Program_Error;
35  end if;
36
37  Data := 2047;
38  Temp := To_Signed_Type (Data);
39  if Temp.S /= 2047 then
40    raise Program_Error;
41  end if;
42  Data := To_Unsigned_Type (Temp);
43  if Data /= 2047 then
44    raise Program_Error;
45  end if;
46
47end;
48