~ chicken-core (chicken-5) f23e9bc7b728e5e92a75bbfb45bbda9ace5b481a


commit f23e9bc7b728e5e92a75bbfb45bbda9ace5b481a
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Sat Aug 20 03:58:30 2011 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Sat Aug 20 04:25:15 2011 +0200

    fixed evaluation-order dependency in division routine

diff --git a/runtime.c b/runtime.c
index 7a166830..b8d9c41d 100644
--- a/runtime.c
+++ b/runtime.c
@@ -6338,7 +6338,7 @@ void C_ccall C_divide(C_word c, C_word closure, C_word k, C_word n1, ...)
 {
   va_list v;
   C_word n2;
-  C_word iresult;
+  C_word iresult, n3;
   int fflag;
   double fresult, f2;
   C_alloc_flonum;
@@ -6389,8 +6389,11 @@ void C_ccall C_divide(C_word c, C_word closure, C_word k, C_word n1, ...)
 	if((n2 = C_unfix(n1)) == 0)
 	  barf(C_DIVISION_BY_ZERO_ERROR, "/");
 
-	if((fresult = (double)iresult / (double)n2) != (iresult / n2))
+	n3 = iresult / n2;
+
+	if((fresult = (double)iresult / (double)n2) != n3)
 	  fflag = 1;
+	else iresult = n3;
       }
     }
     else if(!C_immediatep(n1) && C_block_header(n1) == C_FLONUM_TAG) {
Trap