| ;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. |
| |
| ;; RUN: wasm-opt %s -all --closed-world -tnh --dae2 --closed-world -S -o - \ |
| ;; RUN: | filecheck %s |
| |
| ;; RUN: wasm-opt %s -all --closed-world --dae2 --closed-world -S -o - \ |
| ;; RUN: | filecheck %s --check-prefix=TRAPS |
| |
| |
| (module |
| |
| ;; CHECK: (rec |
| ;; CHECK-NEXT: (type $struct (descriptor $desc) (struct)) |
| |
| ;; CHECK: (type $desc (describes $struct) (struct)) |
| |
| ;; CHECK: (type $2 (func)) |
| |
| ;; CHECK: (type $3 (func)) |
| |
| ;; CHECK: (type $f (func)) |
| ;; TRAPS: (rec |
| ;; TRAPS-NEXT: (type $struct (descriptor $desc) (struct)) |
| |
| ;; TRAPS: (type $desc (describes $struct) (struct)) |
| |
| ;; TRAPS: (type $2 (func)) |
| |
| ;; TRAPS: (type $3 (func)) |
| |
| ;; TRAPS: (type $f (func)) |
| (type $f (func (param i32))) |
| |
| (rec |
| (type $struct (descriptor $desc) (struct)) |
| (type $desc (describes $struct) (struct)) |
| ) |
| |
| ;; CHECK: (memory $m 0 0) |
| ;; TRAPS: (rec |
| ;; TRAPS-NEXT: (type $5 (func (param i32))) |
| |
| ;; TRAPS: (type $6 (struct)) |
| |
| ;; TRAPS: (type $7 (func (param (ref null (exact $desc))))) |
| |
| ;; TRAPS: (rec |
| ;; TRAPS-NEXT: (type $8 (func (param anyref))) |
| |
| ;; TRAPS: (type $9 (struct)) |
| |
| ;; TRAPS: (memory $m 0 0) |
| (memory $m 0 0) |
| ;; CHECK: (func $division (type $2) |
| ;; CHECK-NEXT: (local $x i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const -1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call $division) |
| ;; CHECK-NEXT: ) |
| ;; TRAPS: (func $division (type $5) (param $x i32) |
| ;; TRAPS-NEXT: (call $division |
| ;; TRAPS-NEXT: (i32.div_u |
| ;; TRAPS-NEXT: (i32.const -1) |
| ;; TRAPS-NEXT: (local.get $x) |
| ;; TRAPS-NEXT: ) |
| ;; TRAPS-NEXT: ) |
| ;; TRAPS-NEXT: ) |
| (func $division (param $x i32) |
| (call $division |
| (i32.div_u |
| (i32.const -1) |
| (local.get $x) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $load (type $2) |
| ;; CHECK-NEXT: (local $x i32) |
| ;; CHECK-NEXT: (call $load) |
| ;; CHECK-NEXT: ) |
| ;; TRAPS: (func $load (type $5) (param $x i32) |
| ;; TRAPS-NEXT: (call $load |
| ;; TRAPS-NEXT: (i32.load |
| ;; TRAPS-NEXT: (local.get $x) |
| ;; TRAPS-NEXT: ) |
| ;; TRAPS-NEXT: ) |
| ;; TRAPS-NEXT: ) |
| (func $load (param $x i32) |
| (call $load |
| (i32.load |
| (local.get $x) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $cast (type $2) |
| ;; CHECK-NEXT: (local $ref anyref) |
| ;; CHECK-NEXT: (call $cast) |
| ;; CHECK-NEXT: ) |
| ;; TRAPS: (func $cast (type $8) (param $ref anyref) |
| ;; TRAPS-NEXT: (call $cast |
| ;; TRAPS-NEXT: (ref.cast (ref i31) |
| ;; TRAPS-NEXT: (local.get $ref) |
| ;; TRAPS-NEXT: ) |
| ;; TRAPS-NEXT: ) |
| ;; TRAPS-NEXT: ) |
| (func $cast (param $ref anyref) |
| (call $cast |
| (ref.cast (ref i31) |
| (local.get $ref) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $allocation (type $2) |
| ;; CHECK-NEXT: (local $desc (ref null (exact $desc))) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; TRAPS: (func $allocation (type $7) (param $desc (ref null (exact $desc))) |
| ;; TRAPS-NEXT: (drop |
| ;; TRAPS-NEXT: (struct.new_default_desc $struct |
| ;; TRAPS-NEXT: (local.get $desc) |
| ;; TRAPS-NEXT: ) |
| ;; TRAPS-NEXT: ) |
| ;; TRAPS-NEXT: ) |
| (func $allocation (param $desc (ref null (exact $desc))) |
| (drop |
| (struct.new_desc $struct |
| (local.get $desc) |
| ) |
| ) |
| ) |
| ) |