]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
s-arit64.adb (Double_Divide): Put back changes that got accidentally removed during...
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 3 Jan 2005 15:40:46 +0000 (16:40 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 3 Jan 2005 15:40:46 +0000 (16:40 +0100)
* s-arit64.adb (Double_Divide): Put back changes that got accidentally
removed during the previous update (test properly for case of dividing
largest negative number by -1, which generates overflow).

From-SVN: r92847

gcc/ada/s-arit64.adb

index 869a18eda53ee8888c24ad7048d0355af2a27c69..fc1d2a0ad5e65e5a9219b66cc4c1a4c38cb77281 100644 (file)
@@ -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