77 lines
2 KiB
WebAssembly Text Format
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")
|