~ chicken-core (chicken-5) 7367c220e2d48f14b5108c06bdfb1112317544e3
commit 7367c220e2d48f14b5108c06bdfb1112317544e3
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 03:58:30 2011 +0200
fixed evaluation-order dependency in division routine
diff --git a/runtime.c b/runtime.c
index 22ec794f..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