~ chicken-core (chicken-5) 2d03fb5cebcd35e5dba2b82bad7442dafe423029


commit 2d03fb5cebcd35e5dba2b82bad7442dafe423029
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Sep 2 04:22:49 2010 -0400
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Thu Sep 2 04:22:49 2010 -0400

    fixnum-+/- with overflow check wrong for 64-bit systems

diff --git a/runtime.c b/runtime.c
index 3b8076e2..ca4de104 100644
--- a/runtime.c
+++ b/runtime.c
@@ -8585,7 +8585,11 @@ C_regparm C_word C_fcall C_i_o_fixnum_plus(C_word n1, C_word n2)
   x2 = C_unfix(n2);
   s = x1 + x2;
 
+#ifdef C_SIXTY_FOUR
+  if((((s ^ x1) & (s ^ x2)) >> 62) != 0) return C_SCHEME_FALSE;
+#else
   if((((s ^ x1) & (s ^ x2)) >> 30) != 0) return C_SCHEME_FALSE;
+#endif
   else return C_fix(s);
 }
 
@@ -8600,7 +8604,11 @@ C_regparm C_word C_fcall C_i_o_fixnum_difference(C_word n1, C_word n2)
   x2 = C_unfix(n2);
   s = x1 - x2;
   
+#ifdef C_SIXTY_FOUR
+  if((((s ^ x1) & ~(s ^ x2)) >> 62) != 0) return C_SCHEME_FALSE;
+#else
   if((((s ^ x1) & ~(s ^ x2)) >> 30) != 0) return C_SCHEME_FALSE;
+#endif
   else return C_fix(s);
 }
 
Trap