1-- PR middle-end/36575
2-- reporter: Laurent Guerby <laurent@guerby.net>
3-- { dg-do run }
4
5procedure Conv_Decimal is
6
7  type Unsigned_Over_8 is mod 2**8+2;
8  type Signed_Over_8 is range -200 .. 200;
9
10  procedure Assert(Truth: Boolean) is
11  begin
12    if not Truth then
13      raise Program_Error;
14    end if;
15  end;
16
17  type Decim is delta 0.1 digits 5;
18
19  Halfway  : Decim := 2.5;
20  Neg_Half : Decim := -2.5;
21
22  Big      : Unsigned_Over_8;
23  Also_Big : Signed_Over_8;
24
25begin
26  Big := Unsigned_Over_8 (Halfway); -- Rounds up by 4.6(33).
27  Assert(Big = 3);
28
29  Also_Big := Signed_Over_8 (Halfway); -- Rounds up by 4.6(33).
30  Assert(Also_Big = 3);
31
32  Also_Big := Signed_Over_8 (Neg_Half); -- Rounds down by 4.6(33).
33  Assert(Also_Big = -3);
34end;
35