aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/fixtures/spec_testsuites/core/unreached-valid.wast
diff options
context:
space:
mode:
Diffstat (limited to 'tests/fixtures/spec_testsuites/core/unreached-valid.wast')
-rw-r--r--tests/fixtures/spec_testsuites/core/unreached-valid.wast63
1 files changed, 63 insertions, 0 deletions
diff --git a/tests/fixtures/spec_testsuites/core/unreached-valid.wast b/tests/fixtures/spec_testsuites/core/unreached-valid.wast
new file mode 100644
index 0000000..b7ebabf
--- /dev/null
+++ b/tests/fixtures/spec_testsuites/core/unreached-valid.wast
@@ -0,0 +1,63 @@
+(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_result_1") (result i32)
+ (unreachable) (i32.add (select))
+ )
+
+ (func (export "select_unreached_result_2") (result i64)
+ (unreachable) (i64.add (select (i64.const 0) (i32.const 0)))
+ )
+
+ (func (export "unreachable-num")
+ (unreachable)
+ (select)
+ (i32.eqz)
+ (drop)
+ )
+ (func (export "unreachable-ref")
+ (unreachable)
+ (select)
+ (ref.is_null)
+ (drop)
+ )
+)
+
+(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")
+
+;; 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")