diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/example/find_div0s.cpp | 44 | ||||
-rw-r--r-- | test/example/find_div0s.txt | 10 |
2 files changed, 54 insertions, 0 deletions
diff --git a/test/example/find_div0s.cpp b/test/example/find_div0s.cpp new file mode 100644 index 000000000..77a5d2c61 --- /dev/null +++ b/test/example/find_div0s.cpp @@ -0,0 +1,44 @@ + +#include <ostream> +#include <wasm.h> + +using namespace wasm; + +int main() { + // A module with a function with a division by zero in the body + Module module; + Function func; + func.name = "func"; + Binary div; + div.op = BinaryOp::DivS; + Const left; + left.value = 5; + Const right; + right.value = 0; + div.left = &left; + div.right = &right; + div.finalize(); + func.body = ÷ + module.addFunction(&func); + + // Print it out + std::cout << module; + + // Search it for divisions by zero: Walk the module, looking for + // that operation. + struct DivZeroSeeker : public WasmWalker { + void visitBinary(Binary* curr) { + // In every Binary, look for integer divisions + if (curr->op == BinaryOp::DivS || curr->op == BinaryOp::DivU) { + // Check if the right operand is a constant, and if it is 0 + auto right = curr->right->dyn_cast<Const>(); + if (right && right->value.getInteger() == 0) { + std::cout << "We found that " << curr->left << " is divided by zero\n"; + } + } + } + }; + DivZeroSeeker seeker; + seeker.startWalk(&module); +} + diff --git a/test/example/find_div0s.txt b/test/example/find_div0s.txt new file mode 100644 index 000000000..44397fbde --- /dev/null +++ b/test/example/find_div0s.txt @@ -0,0 +1,10 @@ +(module + (memory 0 4294967295) + (func $func + (none.div_s + (i32.const 5) + (i32.const 0) + ) + ) +) +We found that (i32.const 5) is divided by zero |