| ;; RUN: foreach %s %t not wasm-opt -all 2>&1 | filecheck %s | |
| ;; CHECK: non-nullable local's sets must dominate gets | |
| (module | |
| (func $inner-to-func | |
| ;; a set in an inner scope does *not* help a get validate. | |
| (local $x (ref func)) | |
| (block $b | |
| (local.set $x | |
| (ref.func $helper) | |
| ) | |
| ) | |
| (drop | |
| (local.get $x) | |
| ) | |
| ) | |
| (func $helper) | |
| ) | |
| ;; CHECK: non-nullable local's sets must dominate gets | |
| (module | |
| (func $get-without-set | |
| (local $x (ref func)) | |
| (drop | |
| (local.get $x) | |
| ) | |
| ) | |
| (func $helper) | |
| ) | |
| ;; CHECK: non-nullable local's sets must dominate gets | |
| (module | |
| (func $get-before-set | |
| (local $x (ref func)) | |
| (local.set $x | |
| (local.get $x) | |
| ) | |
| ) | |
| (func $helper) | |
| ) | |
| ;; CHECK: non-nullable local's sets must dominate gets | |
| (module | |
| (func $if-arms | |
| (local $x (ref func)) | |
| (if | |
| (i32.const 1) | |
| ;; Superficially the order is right, but not really. | |
| (then | |
| (local.set $x | |
| (ref.func $helper) | |
| ) | |
| ) | |
| (else | |
| (local.get $x) | |
| ) | |
| ) | |
| ) | |
| (func $helper) | |
| ) | |
| ;; CHECK: non-nullable local's sets must dominate gets | |
| (module | |
| (func $tuple | |
| ;; Since this tuple local has a non-nullable element, it is subject to the | |
| ;; non-nullability rules. | |
| (local $x (tuple i32 (ref any) i64)) | |
| (tuple.drop 3 | |
| (local.get $x) | |
| ) | |
| ) | |
| ) |