| ;; 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 -q -o /dev/null 2>&1 | filecheck %s | |
| (module | |
| (type $i32 (func (result i32))) | |
| (table $table i64 10 funcref) | |
| (elem (i64.const 0) $i32-a $i32-b) | |
| (func $i32-a (result i32) | |
| (i32.const 42) | |
| ) | |
| (func $i32-b (result i32) | |
| (i32.const 1337) | |
| ) | |
| ;; CHECK: [fuzz-exec] export call-a | |
| ;; CHECK-NEXT: [fuzz-exec] note result: call-a => 42 | |
| (func $call-a (export "call-a") (result i32) | |
| ;; This call succeeds, and calls $i32-a which returns 42. | |
| (call_indirect (type $i32) | |
| (i64.const 0) | |
| ) | |
| ) | |
| ;; CHECK: [fuzz-exec] export call-b | |
| ;; CHECK-NEXT: [fuzz-exec] note result: call-b => 1337 | |
| (func $call-b (export "call-b") (result i32) | |
| ;; This call succeeds, and calls $i32-b which returns 1337. | |
| (call_indirect (type $i32) | |
| (i64.const 1) | |
| ) | |
| ) | |
| ;; CHECK: [fuzz-exec] export oob | |
| ;; CHECK-NEXT: [trap out of bounds table access] | |
| (func $oob (export "oob") (result i32) | |
| ;; This call traps on oob. | |
| (call_indirect (type $i32) | |
| (i64.const 999) | |
| ) | |
| ) | |
| ;; CHECK: [fuzz-exec] export oob-huge | |
| ;; CHECK-NEXT: [trap out of bounds table access] | |
| (func $oob-huge (export "oob-huge") (result i32) | |
| ;; This call traps on oob with a value over 32 bits, 2**32 + 1, which if we | |
| ;; truncated to 32 bits, would seem in bounds, and end up calling a valid | |
| ;; function. | |
| (call_indirect (type $i32) | |
| (i64.add | |
| (i64.const 0x100000000) | |
| (i64.const 1) | |
| ) | |
| ) | |
| ) | |
| ;; CHECK: [fuzz-exec] export null | |
| ;; CHECK-NEXT: [trap null target in call_indirect] | |
| (func $null (export "null") (result i32) | |
| ;; This call traps on null | |
| (call_indirect (type $i32) | |
| (i64.const 2) | |
| ) | |
| ) | |
| ) | |
| ;; CHECK: [fuzz-exec] export call-a | |
| ;; CHECK-NEXT: [fuzz-exec] note result: call-a => 42 | |
| ;; CHECK: [fuzz-exec] export call-b | |
| ;; CHECK-NEXT: [fuzz-exec] note result: call-b => 1337 | |
| ;; CHECK: [fuzz-exec] export oob | |
| ;; CHECK-NEXT: [trap out of bounds table access] | |
| ;; CHECK: [fuzz-exec] export oob-huge | |
| ;; CHECK-NEXT: [trap out of bounds table access] | |
| ;; CHECK: [fuzz-exec] export null | |
| ;; CHECK-NEXT: [trap null target in call_indirect] | |
| ;; CHECK-NEXT: [fuzz-exec] comparing call-a | |
| ;; CHECK-NEXT: [fuzz-exec] comparing call-b | |
| ;; CHECK-NEXT: [fuzz-exec] comparing null | |
| ;; CHECK-NEXT: [fuzz-exec] comparing oob | |
| ;; CHECK-NEXT: [fuzz-exec] comparing oob-huge |