| ;; NOTE: Assertions have been generated by update_lit_checks.py --output=fuzz-exec and should not be edited. | |
| ;; RUN: wasm-opt %s -all --fuzz-exec-before -q -o /dev/null 2>&1 | filecheck %s | |
| ;; The elem is out of bounds, leading to a trap during initialization. | |
| (assert_unlinkable | |
| (module | |
| (table $table 1 1 funcref) | |
| (elem $elem (i32.const 1) $foo) | |
| (func $foo) | |
| ) | |
| "trap" | |
| ) | |
| ;; Now it is in bounds, with the elem offset reduced to 0. | |
| (module | |
| (table $table 1 1 funcref) | |
| (elem $elem (i32.const 0) $foo) | |
| (func $foo) | |
| ) | |
| ;; The table begins with a function that returns zero. table.init will replace | |
| ;; it with one that returns 1. | |
| (module | |
| (type $i (func (result i32))) | |
| (table $table 10 funcref) | |
| (elem $zero (i32.const 0) $zero) | |
| (elem $one $one) | |
| (func $call (export "call") (result i32) | |
| (call_indirect (type $i) (i32.const 0)) | |
| ) | |
| (func $init (export "init") (result i32) | |
| (table.init $table $one (i32.const 0) (i32.const 0) (i32.const 1)) | |
| (call $call) | |
| ) | |
| (func $zero (result i32) | |
| (i32.const 0) | |
| ) | |
| (func $one (result i32) | |
| (i32.const 1) | |
| ) | |
| ) | |
| ;; First we get 0, then 1. | |
| (assert_return (invoke "call") (i32.const 0)) | |
| (assert_return (invoke "init") (i32.const 1)) | |