changeset 15095:9df70a18aa27

Correct division by zero check in JIT * src/jit-typeinfo.cc (jit_typinfo::jit_typinfo): Correct division by zero check. * src/pt-jit.cc: Add division by zero tests.
author Max Brister <max@2bass.com>
date Fri, 03 Aug 2012 10:14:57 -0500
parents f51f0f288997
children 909a2797935b
files src/jit-typeinfo.cc src/pt-jit.cc
diffstat 2 files changed, 24 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/jit-typeinfo.cc	Fri Aug 03 21:28:21 2012 +0200
+++ b/src/jit-typeinfo.cc	Fri Aug 03 10:14:57 2012 -0500
@@ -1162,7 +1162,7 @@
     llvm::BasicBlock *normal_block = fn.new_block ("normal");
 
     llvm::Value *zero = llvm::ConstantFP::get (scalar_t, 0);
-    llvm::Value *check = builder.CreateFCmpUEQ (zero, fn.argument (builder, 0));
+    llvm::Value *check = builder.CreateFCmpUEQ (zero, fn.argument (builder, 1));
     builder.CreateCondBr (check, warn_block, normal_block);
 
     builder.SetInsertPoint (warn_block);
--- a/src/pt-jit.cc	Fri Aug 03 21:28:21 2012 +0200
+++ b/src/pt-jit.cc	Fri Aug 03 10:14:57 2012 -0500
@@ -1904,4 +1904,27 @@
 %! assert (all (m == expected));
 %! assert (result == sum (expected (:)));
 
+%!function test_divide ()
+%! state = warning ("query", "Octave:divide-by-zero").state;
+%! unwind_protect
+%!   warning ("error", "Octave:divide-by-zero");
+%!   for i=1:1e5
+%!     a = 1;
+%!     a / 0;
+%!   endfor
+%! unwind_protect_cleanup
+%!   warning (state, "Octave:divide-by-zero");
+%! end_unwind_protect
+%!endfunction
+
+%!error <division by zero> test_divide ()
+
+%!test
+%! while 1
+%!   a = 0;
+%!   result = a / 1;
+%!   break;
+%! endwhile
+%! assert (result, 0);
+
 */