diff --git a/gcc/ada/s-arit64.adb b/gcc/ada/s-arit64.adb index 869a18eda53..fc1d2a0ad5e 100644 --- a/gcc/ada/s-arit64.adb +++ b/gcc/ada/s-arit64.adb @@ -232,6 +232,19 @@ package body System.Arith_64 is end if; Du := Lo (T2) & Lo (T1); + + -- Set final signs (RM 4.5.5(27-30)) + + Den_Pos := (Y < 0) = (Z < 0); + + -- Check overflow case of largest negative number divided by 1 + + if X = Int64'First and then Du = 1 and then not Den_Pos then + Raise_Error; + end if; + + -- Perform the actual division + Qu := Xu / Du; Ru := Xu rem Du; @@ -241,10 +254,6 @@ package body System.Arith_64 is Qu := Qu + Uns64'(1); end if; - -- Set final signs (RM 4.5.5(27-30)) - - Den_Pos := (Y < 0) = (Z < 0); - -- Case of dividend (X) sign positive if X >= 0 then