Mercurial > hg > octave-nkf
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 +++ b/src/jit-typeinfo.cc @@ -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 +++ b/src/pt-jit.cc @@ -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); + */