| ;; 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] calling 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] calling 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] calling oob |
| ;; CHECK-NEXT: [trap callTable overflow] |
| (func $oob (export "oob") (result i32) |
| ;; This call traps on oob. |
| (call_indirect (type $i32) |
| (i64.const 999) |
| ) |
| ) |
| |
| ;; CHECK: [fuzz-exec] calling oob-huge |
| ;; CHECK-NEXT: [trap callTable overflow] |
| (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] calling null |
| ;; CHECK-NEXT: [trap uninitialized table element] |
| (func $null (export "null") (result i32) |
| ;; This call traps on null |
| (call_indirect (type $i32) |
| (i64.const 2) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: [fuzz-exec] calling call-a |
| ;; CHECK-NEXT: [fuzz-exec] note result: call-a => 42 |
| |
| ;; CHECK: [fuzz-exec] calling call-b |
| ;; CHECK-NEXT: [fuzz-exec] note result: call-b => 1337 |
| |
| ;; CHECK: [fuzz-exec] calling oob |
| ;; CHECK-NEXT: [trap callTable overflow] |
| |
| ;; CHECK: [fuzz-exec] calling oob-huge |
| ;; CHECK-NEXT: [trap callTable overflow] |
| |
| ;; CHECK: [fuzz-exec] calling null |
| ;; CHECK-NEXT: [trap uninitialized table element] |
| ;; 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 |