* gcc-interface/utils.c (type_unsigned_for_rm): New predicate.
[official-gcc.git] / gcc / testsuite / gnat.dg / unchecked_convert11.adb
blobad98a8814260ad24441cafbf7bb87414a079c558
1 -- { dg-do run }
3 with Unchecked_Conversion;
5 procedure Unchecked_Convert11 is
7 subtype Unsigned_Type is Integer range 2_034 .. 2_164;
9 subtype Signed_Type is Integer range -2048 .. 2047;
11 type Rec is record
12 S : Signed_Type;
13 end record;
14 pragma Pack (Rec);
16 function To_Signed_Type is
17 new Unchecked_Conversion (Source => Unsigned_Type, Target => Rec);
19 function To_Unsigned_Type is
20 new Unchecked_Conversion (Source => Rec, Target => Unsigned_Type);
22 Data : Unsigned_Type;
23 Temp : Rec;
25 begin
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;
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;
47 end;