aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/fixtures/spec_testsuites/core/unreached-valid.wast
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2024-03-16 20:41:50 +0900
committernsfisis <nsfisis@gmail.com>2024-03-16 20:41:50 +0900
commit3d2d891d7e1492d179cd8da7a618fbdd5efcca2c (patch)
tree45367f35d98af1125a2197b3bc3dbc35700128d7 /tests/fixtures/spec_testsuites/core/unreached-valid.wast
parent9b45796547c8022b98a9254320323d72aecd81cb (diff)
downloadphp-waddiwasi-3d2d891d7e1492d179cd8da7a618fbdd5efcca2c.tar.gz
php-waddiwasi-3d2d891d7e1492d179cd8da7a618fbdd5efcca2c.tar.zst
php-waddiwasi-3d2d891d7e1492d179cd8da7a618fbdd5efcca2c.zip
feat: add spec testsuites
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")