~ 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