-- PR middle-end/36575 -- reporter: Laurent Guerby -- { dg-do run } procedure Conv_Decimal is type Unsigned_Over_8 is mod 2**8+2; type Signed_Over_8 is range -200 .. 200; procedure Assert(Truth: Boolean) is begin if not Truth then raise Program_Error; end if; end; type Decim is delta 0.1 digits 5; Halfway : Decim := 2.5; Neg_Half : Decim := -2.5; Big : Unsigned_Over_8; Also_Big : Signed_Over_8; begin Big := Unsigned_Over_8 (Halfway); -- Rounds up by 4.6(33). Assert(Big = 3); Also_Big := Signed_Over_8 (Halfway); -- Rounds up by 4.6(33). Assert(Also_Big = 3); Also_Big := Signed_Over_8 (Neg_Half); -- Rounds down by 4.6(33). Assert(Also_Big = -3); end;