Index: s-arit64.adb =================================================================== RCS file: /cvs/gcc/gcc/gcc/ada/s-arit64.adb,v retrieving revision 1.8 diff -u -p -r1.8 s-arit64.adb --- s-arit64.adb 27 Oct 2004 13:39:21 -0000 1.8 +++ s-arit64.adb 3 Jan 2005 15:15:30 -0000 @@ -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