summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-02-15 19:59:26 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-02-15 19:59:26 +0900
commite29efb02bdaa47384eabd44031fac5ffd8ce30e0 (patch)
treea0b096d6d7098479afe924ee6376f26434a348f0 /src
parent8b93f8591d7820b4d5b867c9fb9860e9c9841d72 (diff)
downloadmruby-e29efb02bdaa47384eabd44031fac5ffd8ce30e0.tar.gz
mruby-e29efb02bdaa47384eabd44031fac5ffd8ce30e0.zip
normalize NaN after division that may generate NaN; fix #1712
Diffstat (limited to 'src')
-rw-r--r--src/vm.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/vm.c b/src/vm.c
index 52510c98d..e82806e4d 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -7,6 +7,7 @@
#include <setjmp.h>
#include <stddef.h>
#include <stdarg.h>
+#include <math.h>
#include "mruby.h"
#include "mruby/array.h"
#include "mruby/class.h"
@@ -1712,6 +1713,11 @@ mrb_context_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int
default:
goto L_SEND;
}
+#ifdef MRB_NAN_BOXING
+ if (isnan(regs[a].attr_f)) {
+ regs[a] = mrb_float_value(mrb, regs[a].attr_f);
+ }
+#endif
NEXT;
}