makepad/libs/stitch/tests/testsuite/proposals/function-references/unreached-valid.wast
2025-05-06 10:11:37 +02:00

77 lines
2 KiB
WebAssembly Text Format

(module
;; Check that both sides of the select are evaluated
(func (export "select-trap-left") (param $cond i32) (result i32)
(select (unreachable) (i32.const 0) (local.get $cond))
)
(func (export "select-trap-right") (param $cond i32) (result i32)
(select (i32.const 0) (unreachable) (local.get $cond))
)
(func (export "select-unreached")
(unreachable) (select)
(unreachable) (i32.const 0) (select)
(unreachable) (i32.const 0) (i32.const 0) (select)
(unreachable) (i32.const 0) (i32.const 0) (i32.const 0) (select)
(unreachable) (f32.const 0) (i32.const 0) (select)
(unreachable)
)
(func (export "select-unreached-result1") (result i32)
(unreachable) (i32.add (select))
)
(func (export "select-unreached-result2") (result i64)
(unreachable) (i64.add (select (i64.const 0) (i32.const 0)))
)
(func (export "select-unreached-num")
(unreachable)
(select)
(i32.eqz)
(drop)
)
(func (export "select-unreached-ref")
(unreachable)
(select)
(ref.is_null)
(drop)
)
(type $t (func (param i32) (result i32)))
(func (export "call_ref-unreached") (result i32)
(unreachable)
(call_ref $t)
)
)
(assert_trap (invoke "select-trap-left" (i32.const 1)) "unreachable")
(assert_trap (invoke "select-trap-left" (i32.const 0)) "unreachable")
(assert_trap (invoke "select-trap-right" (i32.const 1)) "unreachable")
(assert_trap (invoke "select-trap-right" (i32.const 0)) "unreachable")
(assert_trap (invoke "select-unreached-result1") "unreachable")
(assert_trap (invoke "select-unreached-result2") "unreachable")
(assert_trap (invoke "select-unreached-num") "unreachable")
(assert_trap (invoke "select-unreached-ref") "unreachable")
(assert_trap (invoke "call_ref-unreached") "unreachable")
;; Validation after unreachable
(module
(func (export "meet-bottom")
(block (result f64)
(block (result f32)
(unreachable)
(br_table 0 1 1 (i32.const 1))
)
(drop)
(f64.const 0)
)
(drop)
)
)
(assert_trap (invoke "meet-bottom") "unreachable")