diff --git a/test/spec/address.wast b/test/spec/address.wast deleted file mode 100644 index 212b7a85aa6..00000000000 --- a/test/spec/address.wast +++ /dev/null @@ -1,589 +0,0 @@ -;; Load i32 data with different offset/align arguments - -(module - (memory 1) - (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") - - (func (export "8u_good1") (param $i i32) (result i32) - (i32.load8_u offset=0 (local.get $i)) ;; 97 'a' - ) - (func (export "8u_good2") (param $i i32) (result i32) - (i32.load8_u align=1 (local.get $i)) ;; 97 'a' - ) - (func (export "8u_good3") (param $i i32) (result i32) - (i32.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' - ) - (func (export "8u_good4") (param $i i32) (result i32) - (i32.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' - ) - (func (export "8u_good5") (param $i i32) (result i32) - (i32.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' - ) - - (func (export "8s_good1") (param $i i32) (result i32) - (i32.load8_s offset=0 (local.get $i)) ;; 97 'a' - ) - (func (export "8s_good2") (param $i i32) (result i32) - (i32.load8_s align=1 (local.get $i)) ;; 97 'a' - ) - (func (export "8s_good3") (param $i i32) (result i32) - (i32.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' - ) - (func (export "8s_good4") (param $i i32) (result i32) - (i32.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' - ) - (func (export "8s_good5") (param $i i32) (result i32) - (i32.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' - ) - - (func (export "16u_good1") (param $i i32) (result i32) - (i32.load16_u offset=0 (local.get $i)) ;; 25185 'ab' - ) - (func (export "16u_good2") (param $i i32) (result i32) - (i32.load16_u align=1 (local.get $i)) ;; 25185 'ab' - ) - (func (export "16u_good3") (param $i i32) (result i32) - (i32.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' - ) - (func (export "16u_good4") (param $i i32) (result i32) - (i32.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' - ) - (func (export "16u_good5") (param $i i32) (result i32) - (i32.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' - ) - - (func (export "16s_good1") (param $i i32) (result i32) - (i32.load16_s offset=0 (local.get $i)) ;; 25185 'ab' - ) - (func (export "16s_good2") (param $i i32) (result i32) - (i32.load16_s align=1 (local.get $i)) ;; 25185 'ab' - ) - (func (export "16s_good3") (param $i i32) (result i32) - (i32.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' - ) - (func (export "16s_good4") (param $i i32) (result i32) - (i32.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' - ) - (func (export "16s_good5") (param $i i32) (result i32) - (i32.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' - ) - - (func (export "32_good1") (param $i i32) (result i32) - (i32.load offset=0 (local.get $i)) ;; 1684234849 'abcd' - ) - (func (export "32_good2") (param $i i32) (result i32) - (i32.load align=1 (local.get $i)) ;; 1684234849 'abcd' - ) - (func (export "32_good3") (param $i i32) (result i32) - (i32.load offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' - ) - (func (export "32_good4") (param $i i32) (result i32) - (i32.load offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' - ) - (func (export "32_good5") (param $i i32) (result i32) - (i32.load offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' - ) - - (func (export "8u_bad") (param $i i32) - (drop (i32.load8_u offset=4294967295 (local.get $i))) - ) - (func (export "8s_bad") (param $i i32) - (drop (i32.load8_s offset=4294967295 (local.get $i))) - ) - (func (export "16u_bad") (param $i i32) - (drop (i32.load16_u offset=4294967295 (local.get $i))) - ) - (func (export "16s_bad") (param $i i32) - (drop (i32.load16_s offset=4294967295 (local.get $i))) - ) - (func (export "32_bad") (param $i i32) - (drop (i32.load offset=4294967295 (local.get $i))) - ) -) - -(assert_return (invoke "8u_good1" (i32.const 0)) (i32.const 97)) -(assert_return (invoke "8u_good2" (i32.const 0)) (i32.const 97)) -(assert_return (invoke "8u_good3" (i32.const 0)) (i32.const 98)) -(assert_return (invoke "8u_good4" (i32.const 0)) (i32.const 99)) -(assert_return (invoke "8u_good5" (i32.const 0)) (i32.const 122)) - -(assert_return (invoke "8s_good1" (i32.const 0)) (i32.const 97)) -(assert_return (invoke "8s_good2" (i32.const 0)) (i32.const 97)) -(assert_return (invoke "8s_good3" (i32.const 0)) (i32.const 98)) -(assert_return (invoke "8s_good4" (i32.const 0)) (i32.const 99)) -(assert_return (invoke "8s_good5" (i32.const 0)) (i32.const 122)) - -(assert_return (invoke "16u_good1" (i32.const 0)) (i32.const 25185)) -(assert_return (invoke "16u_good2" (i32.const 0)) (i32.const 25185)) -(assert_return (invoke "16u_good3" (i32.const 0)) (i32.const 25442)) -(assert_return (invoke "16u_good4" (i32.const 0)) (i32.const 25699)) -(assert_return (invoke "16u_good5" (i32.const 0)) (i32.const 122)) - -(assert_return (invoke "16s_good1" (i32.const 0)) (i32.const 25185)) -(assert_return (invoke "16s_good2" (i32.const 0)) (i32.const 25185)) -(assert_return (invoke "16s_good3" (i32.const 0)) (i32.const 25442)) -(assert_return (invoke "16s_good4" (i32.const 0)) (i32.const 25699)) -(assert_return (invoke "16s_good5" (i32.const 0)) (i32.const 122)) - -(assert_return (invoke "32_good1" (i32.const 0)) (i32.const 1684234849)) -(assert_return (invoke "32_good2" (i32.const 0)) (i32.const 1684234849)) -(assert_return (invoke "32_good3" (i32.const 0)) (i32.const 1701077858)) -(assert_return (invoke "32_good4" (i32.const 0)) (i32.const 1717920867)) -(assert_return (invoke "32_good5" (i32.const 0)) (i32.const 122)) - -(assert_return (invoke "8u_good1" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "8u_good2" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "8u_good3" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "8u_good4" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "8u_good5" (i32.const 65507)) (i32.const 0)) - -(assert_return (invoke "8s_good1" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "8s_good2" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "8s_good3" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "8s_good4" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "8s_good5" (i32.const 65507)) (i32.const 0)) - -(assert_return (invoke "16u_good1" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "16u_good2" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "16u_good3" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "16u_good4" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "16u_good5" (i32.const 65507)) (i32.const 0)) - -(assert_return (invoke "16s_good1" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "16s_good2" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "16s_good3" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "16s_good4" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "16s_good5" (i32.const 65507)) (i32.const 0)) - -(assert_return (invoke "32_good1" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "32_good2" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "32_good3" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "32_good4" (i32.const 65507)) (i32.const 0)) -(assert_return (invoke "32_good5" (i32.const 65507)) (i32.const 0)) - -(assert_return (invoke "8u_good1" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "8u_good2" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "8u_good3" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "8u_good4" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "8u_good5" (i32.const 65508)) (i32.const 0)) - -(assert_return (invoke "8s_good1" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "8s_good2" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "8s_good3" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "8s_good4" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "8s_good5" (i32.const 65508)) (i32.const 0)) - -(assert_return (invoke "16u_good1" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "16u_good2" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "16u_good3" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "16u_good4" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "16u_good5" (i32.const 65508)) (i32.const 0)) - -(assert_return (invoke "16s_good1" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "16s_good2" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "16s_good3" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "16s_good4" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "16s_good5" (i32.const 65508)) (i32.const 0)) - -(assert_return (invoke "32_good1" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "32_good2" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "32_good3" (i32.const 65508)) (i32.const 0)) -(assert_return (invoke "32_good4" (i32.const 65508)) (i32.const 0)) -(assert_trap (invoke "32_good5" (i32.const 65508)) "out of bounds memory access") - -(assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") - -(assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") -(assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") -(assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") -(assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") -(assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") - -(assert_invalid - (module quote - "(memory 1)" - "(func (drop (i32.load offset=4294967296 (i32.const 0))))" - ) - "i32 constant" -) - -;; Load i64 data with different offset/align arguments - -(module - (memory 1) - (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") - - (func (export "8u_good1") (param $i i32) (result i64) - (i64.load8_u offset=0 (local.get $i)) ;; 97 'a' - ) - (func (export "8u_good2") (param $i i32) (result i64) - (i64.load8_u align=1 (local.get $i)) ;; 97 'a' - ) - (func (export "8u_good3") (param $i i32) (result i64) - (i64.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' - ) - (func (export "8u_good4") (param $i i32) (result i64) - (i64.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' - ) - (func (export "8u_good5") (param $i i32) (result i64) - (i64.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' - ) - - (func (export "8s_good1") (param $i i32) (result i64) - (i64.load8_s offset=0 (local.get $i)) ;; 97 'a' - ) - (func (export "8s_good2") (param $i i32) (result i64) - (i64.load8_s align=1 (local.get $i)) ;; 97 'a' - ) - (func (export "8s_good3") (param $i i32) (result i64) - (i64.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' - ) - (func (export "8s_good4") (param $i i32) (result i64) - (i64.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' - ) - (func (export "8s_good5") (param $i i32) (result i64) - (i64.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' - ) - - (func (export "16u_good1") (param $i i32) (result i64) - (i64.load16_u offset=0 (local.get $i)) ;; 25185 'ab' - ) - (func (export "16u_good2") (param $i i32) (result i64) - (i64.load16_u align=1 (local.get $i)) ;; 25185 'ab' - ) - (func (export "16u_good3") (param $i i32) (result i64) - (i64.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' - ) - (func (export "16u_good4") (param $i i32) (result i64) - (i64.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' - ) - (func (export "16u_good5") (param $i i32) (result i64) - (i64.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' - ) - - (func (export "16s_good1") (param $i i32) (result i64) - (i64.load16_s offset=0 (local.get $i)) ;; 25185 'ab' - ) - (func (export "16s_good2") (param $i i32) (result i64) - (i64.load16_s align=1 (local.get $i)) ;; 25185 'ab' - ) - (func (export "16s_good3") (param $i i32) (result i64) - (i64.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' - ) - (func (export "16s_good4") (param $i i32) (result i64) - (i64.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' - ) - (func (export "16s_good5") (param $i i32) (result i64) - (i64.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' - ) - - (func (export "32u_good1") (param $i i32) (result i64) - (i64.load32_u offset=0 (local.get $i)) ;; 1684234849 'abcd' - ) - (func (export "32u_good2") (param $i i32) (result i64) - (i64.load32_u align=1 (local.get $i)) ;; 1684234849 'abcd' - ) - (func (export "32u_good3") (param $i i32) (result i64) - (i64.load32_u offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' - ) - (func (export "32u_good4") (param $i i32) (result i64) - (i64.load32_u offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' - ) - (func (export "32u_good5") (param $i i32) (result i64) - (i64.load32_u offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' - ) - - (func (export "32s_good1") (param $i i32) (result i64) - (i64.load32_s offset=0 (local.get $i)) ;; 1684234849 'abcd' - ) - (func (export "32s_good2") (param $i i32) (result i64) - (i64.load32_s align=1 (local.get $i)) ;; 1684234849 'abcd' - ) - (func (export "32s_good3") (param $i i32) (result i64) - (i64.load32_s offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' - ) - (func (export "32s_good4") (param $i i32) (result i64) - (i64.load32_s offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' - ) - (func (export "32s_good5") (param $i i32) (result i64) - (i64.load32_s offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' - ) - - (func (export "64_good1") (param $i i32) (result i64) - (i64.load offset=0 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' - ) - (func (export "64_good2") (param $i i32) (result i64) - (i64.load align=1 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' - ) - (func (export "64_good3") (param $i i32) (result i64) - (i64.load offset=1 align=1 (local.get $i)) ;; 0x6968676665646362 'bcdefghi' - ) - (func (export "64_good4") (param $i i32) (result i64) - (i64.load offset=2 align=2 (local.get $i)) ;; 0x6a69686766656463 'cdefghij' - ) - (func (export "64_good5") (param $i i32) (result i64) - (i64.load offset=25 align=8 (local.get $i)) ;; 122 'z\0\0\0\0\0\0\0' - ) - - (func (export "8u_bad") (param $i i32) - (drop (i64.load8_u offset=4294967295 (local.get $i))) - ) - (func (export "8s_bad") (param $i i32) - (drop (i64.load8_s offset=4294967295 (local.get $i))) - ) - (func (export "16u_bad") (param $i i32) - (drop (i64.load16_u offset=4294967295 (local.get $i))) - ) - (func (export "16s_bad") (param $i i32) - (drop (i64.load16_s offset=4294967295 (local.get $i))) - ) - (func (export "32u_bad") (param $i i32) - (drop (i64.load32_u offset=4294967295 (local.get $i))) - ) - (func (export "32s_bad") (param $i i32) - (drop (i64.load32_s offset=4294967295 (local.get $i))) - ) - (func (export "64_bad") (param $i i32) - (drop (i64.load offset=4294967295 (local.get $i))) - ) -) - -(assert_return (invoke "8u_good1" (i32.const 0)) (i64.const 97)) -(assert_return (invoke "8u_good2" (i32.const 0)) (i64.const 97)) -(assert_return (invoke "8u_good3" (i32.const 0)) (i64.const 98)) -(assert_return (invoke "8u_good4" (i32.const 0)) (i64.const 99)) -(assert_return (invoke "8u_good5" (i32.const 0)) (i64.const 122)) - -(assert_return (invoke "8s_good1" (i32.const 0)) (i64.const 97)) -(assert_return (invoke "8s_good2" (i32.const 0)) (i64.const 97)) -(assert_return (invoke "8s_good3" (i32.const 0)) (i64.const 98)) -(assert_return (invoke "8s_good4" (i32.const 0)) (i64.const 99)) -(assert_return (invoke "8s_good5" (i32.const 0)) (i64.const 122)) - -(assert_return (invoke "16u_good1" (i32.const 0)) (i64.const 25185)) -(assert_return (invoke "16u_good2" (i32.const 0)) (i64.const 25185)) -(assert_return (invoke "16u_good3" (i32.const 0)) (i64.const 25442)) -(assert_return (invoke "16u_good4" (i32.const 0)) (i64.const 25699)) -(assert_return (invoke "16u_good5" (i32.const 0)) (i64.const 122)) - -(assert_return (invoke "16s_good1" (i32.const 0)) (i64.const 25185)) -(assert_return (invoke "16s_good2" (i32.const 0)) (i64.const 25185)) -(assert_return (invoke "16s_good3" (i32.const 0)) (i64.const 25442)) -(assert_return (invoke "16s_good4" (i32.const 0)) (i64.const 25699)) -(assert_return (invoke "16s_good5" (i32.const 0)) (i64.const 122)) - -(assert_return (invoke "32u_good1" (i32.const 0)) (i64.const 1684234849)) -(assert_return (invoke "32u_good2" (i32.const 0)) (i64.const 1684234849)) -(assert_return (invoke "32u_good3" (i32.const 0)) (i64.const 1701077858)) -(assert_return (invoke "32u_good4" (i32.const 0)) (i64.const 1717920867)) -(assert_return (invoke "32u_good5" (i32.const 0)) (i64.const 122)) - -(assert_return (invoke "32s_good1" (i32.const 0)) (i64.const 1684234849)) -(assert_return (invoke "32s_good2" (i32.const 0)) (i64.const 1684234849)) -(assert_return (invoke "32s_good3" (i32.const 0)) (i64.const 1701077858)) -(assert_return (invoke "32s_good4" (i32.const 0)) (i64.const 1717920867)) -(assert_return (invoke "32s_good5" (i32.const 0)) (i64.const 122)) - -(assert_return (invoke "64_good1" (i32.const 0)) (i64.const 0x6867666564636261)) -(assert_return (invoke "64_good2" (i32.const 0)) (i64.const 0x6867666564636261)) -(assert_return (invoke "64_good3" (i32.const 0)) (i64.const 0x6968676665646362)) -(assert_return (invoke "64_good4" (i32.const 0)) (i64.const 0x6a69686766656463)) -(assert_return (invoke "64_good5" (i32.const 0)) (i64.const 122)) - -(assert_return (invoke "8u_good1" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "8u_good2" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "8u_good3" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "8u_good4" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "8u_good5" (i32.const 65503)) (i64.const 0)) - -(assert_return (invoke "8s_good1" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "8s_good2" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "8s_good3" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "8s_good4" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "8s_good5" (i32.const 65503)) (i64.const 0)) - -(assert_return (invoke "16u_good1" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "16u_good2" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "16u_good3" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "16u_good4" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "16u_good5" (i32.const 65503)) (i64.const 0)) - -(assert_return (invoke "16s_good1" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "16s_good2" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "16s_good3" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "16s_good4" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "16s_good5" (i32.const 65503)) (i64.const 0)) - -(assert_return (invoke "32u_good1" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "32u_good2" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "32u_good3" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "32u_good4" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "32u_good5" (i32.const 65503)) (i64.const 0)) - -(assert_return (invoke "32s_good1" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "32s_good2" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "32s_good3" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "32s_good4" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "32s_good5" (i32.const 65503)) (i64.const 0)) - -(assert_return (invoke "64_good1" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "64_good2" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "64_good3" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "64_good4" (i32.const 65503)) (i64.const 0)) -(assert_return (invoke "64_good5" (i32.const 65503)) (i64.const 0)) - -(assert_return (invoke "8u_good1" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "8u_good2" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "8u_good3" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "8u_good4" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "8u_good5" (i32.const 65504)) (i64.const 0)) - -(assert_return (invoke "8s_good1" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "8s_good2" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "8s_good3" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "8s_good4" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "8s_good5" (i32.const 65504)) (i64.const 0)) - -(assert_return (invoke "16u_good1" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "16u_good2" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "16u_good3" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "16u_good4" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "16u_good5" (i32.const 65504)) (i64.const 0)) - -(assert_return (invoke "16s_good1" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "16s_good2" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "16s_good3" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "16s_good4" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "16s_good5" (i32.const 65504)) (i64.const 0)) - -(assert_return (invoke "32u_good1" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "32u_good2" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "32u_good3" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "32u_good4" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "32u_good5" (i32.const 65504)) (i64.const 0)) - -(assert_return (invoke "32s_good1" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "32s_good2" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "32s_good3" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "32s_good4" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "32s_good5" (i32.const 65504)) (i64.const 0)) - -(assert_return (invoke "64_good1" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "64_good2" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "64_good3" (i32.const 65504)) (i64.const 0)) -(assert_return (invoke "64_good4" (i32.const 65504)) (i64.const 0)) -(assert_trap (invoke "64_good5" (i32.const 65504)) "out of bounds memory access") - -(assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") - -(assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") -(assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") -(assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") -(assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") -(assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") - -;; Load f32 data with different offset/align arguments - -(module - (memory 1) - (data (i32.const 0) "\00\00\00\00\00\00\a0\7f\01\00\d0\7f") - - (func (export "32_good1") (param $i i32) (result f32) - (f32.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00' - ) - (func (export "32_good2") (param $i i32) (result f32) - (f32.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' - ) - (func (export "32_good3") (param $i i32) (result f32) - (f32.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' - ) - (func (export "32_good4") (param $i i32) (result f32) - (f32.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00' - ) - (func (export "32_good5") (param $i i32) (result f32) - (f32.load offset=8 align=4 (local.get $i)) ;; nan:0x500001 '\01\00\d0\7f' - ) - (func (export "32_bad") (param $i i32) - (drop (f32.load offset=4294967295 (local.get $i))) - ) -) - -(assert_return (invoke "32_good1" (i32.const 0)) (f32.const 0.0)) -(assert_return (invoke "32_good2" (i32.const 0)) (f32.const 0.0)) -(assert_return (invoke "32_good3" (i32.const 0)) (f32.const 0.0)) -(assert_return (invoke "32_good4" (i32.const 0)) (f32.const 0.0)) -(assert_return (invoke "32_good5" (i32.const 0)) (f32.const nan:0x500001)) - -(assert_return (invoke "32_good1" (i32.const 65524)) (f32.const 0.0)) -(assert_return (invoke "32_good2" (i32.const 65524)) (f32.const 0.0)) -(assert_return (invoke "32_good3" (i32.const 65524)) (f32.const 0.0)) -(assert_return (invoke "32_good4" (i32.const 65524)) (f32.const 0.0)) -(assert_return (invoke "32_good5" (i32.const 65524)) (f32.const 0.0)) - -(assert_return (invoke "32_good1" (i32.const 65525)) (f32.const 0.0)) -(assert_return (invoke "32_good2" (i32.const 65525)) (f32.const 0.0)) -(assert_return (invoke "32_good3" (i32.const 65525)) (f32.const 0.0)) -(assert_return (invoke "32_good4" (i32.const 65525)) (f32.const 0.0)) -(assert_trap (invoke "32_good5" (i32.const 65525)) "out of bounds memory access") - -(assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") - -;; Load f64 data with different offset/align arguments - -(module - (memory 1) - (data (i32.const 0) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f4\7f\01\00\00\00\00\00\fc\7f") - - (func (export "64_good1") (param $i i32) (result f64) - (f64.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' - ) - (func (export "64_good2") (param $i i32) (result f64) - (f64.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' - ) - (func (export "64_good3") (param $i i32) (result f64) - (f64.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' - ) - (func (export "64_good4") (param $i i32) (result f64) - (f64.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' - ) - (func (export "64_good5") (param $i i32) (result f64) - (f64.load offset=18 align=8 (local.get $i)) ;; nan:0xc000000000001 '\01\00\00\00\00\00\fc\7f' - ) - (func (export "64_bad") (param $i i32) - (drop (f64.load offset=4294967295 (local.get $i))) - ) -) - -(assert_return (invoke "64_good1" (i32.const 0)) (f64.const 0.0)) -(assert_return (invoke "64_good2" (i32.const 0)) (f64.const 0.0)) -(assert_return (invoke "64_good3" (i32.const 0)) (f64.const 0.0)) -(assert_return (invoke "64_good4" (i32.const 0)) (f64.const 0.0)) -(assert_return (invoke "64_good5" (i32.const 0)) (f64.const nan:0xc000000000001)) - -(assert_return (invoke "64_good1" (i32.const 65510)) (f64.const 0.0)) -(assert_return (invoke "64_good2" (i32.const 65510)) (f64.const 0.0)) -(assert_return (invoke "64_good3" (i32.const 65510)) (f64.const 0.0)) -(assert_return (invoke "64_good4" (i32.const 65510)) (f64.const 0.0)) -(assert_return (invoke "64_good5" (i32.const 65510)) (f64.const 0.0)) - -(assert_return (invoke "64_good1" (i32.const 65511)) (f64.const 0.0)) -(assert_return (invoke "64_good2" (i32.const 65511)) (f64.const 0.0)) -(assert_return (invoke "64_good3" (i32.const 65511)) (f64.const 0.0)) -(assert_return (invoke "64_good4" (i32.const 65511)) (f64.const 0.0)) -(assert_trap (invoke "64_good5" (i32.const 65511)) "out of bounds memory access") - -(assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") -(assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") diff --git a/test/spec/align.wast b/test/spec/align.wast deleted file mode 100644 index 93064649d38..00000000000 --- a/test/spec/align.wast +++ /dev/null @@ -1,866 +0,0 @@ -;; Test alignment annotation rules - -(module (memory 0) (func (drop (i32.load8_s align=1 (i32.const 0))))) -(module (memory 0) (func (drop (i32.load8_u align=1 (i32.const 0))))) -(module (memory 0) (func (drop (i32.load16_s align=2 (i32.const 0))))) -(module (memory 0) (func (drop (i32.load16_u align=2 (i32.const 0))))) -(module (memory 0) (func (drop (i32.load align=4 (i32.const 0))))) -(module (memory 0) (func (drop (i64.load8_s align=1 (i32.const 0))))) -(module (memory 0) (func (drop (i64.load8_u align=1 (i32.const 0))))) -(module (memory 0) (func (drop (i64.load16_s align=2 (i32.const 0))))) -(module (memory 0) (func (drop (i64.load16_u align=2 (i32.const 0))))) -(module (memory 0) (func (drop (i64.load32_s align=4 (i32.const 0))))) -(module (memory 0) (func (drop (i64.load32_u align=4 (i32.const 0))))) -(module (memory 0) (func (drop (i64.load align=8 (i32.const 0))))) -(module (memory 0) (func (drop (f32.load align=4 (i32.const 0))))) -(module (memory 0) (func (drop (f64.load align=8 (i32.const 0))))) -(module (memory 0) (func (i32.store8 align=1 (i32.const 0) (i32.const 1)))) -(module (memory 0) (func (i32.store16 align=2 (i32.const 0) (i32.const 1)))) -(module (memory 0) (func (i32.store align=4 (i32.const 0) (i32.const 1)))) -(module (memory 0) (func (i64.store8 align=1 (i32.const 0) (i64.const 1)))) -(module (memory 0) (func (i64.store16 align=2 (i32.const 0) (i64.const 1)))) -(module (memory 0) (func (i64.store32 align=4 (i32.const 0) (i64.const 1)))) -(module (memory 0) (func (i64.store align=8 (i32.const 0) (i64.const 1)))) -(module (memory 0) (func (f32.store align=4 (i32.const 0) (f32.const 1.0)))) -(module (memory 0) (func (f64.store align=8 (i32.const 0) (f64.const 1.0)))) - -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i32.load8_s align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i32.load8_s align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i32.load8_u align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i32.load8_u align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i32.load16_s align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i32.load16_s align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i32.load16_u align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i32.load16_u align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i32.load align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i32.load align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load8_s align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load8_s align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load8_u align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load8_u align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load16_s align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load16_s align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load16_u align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load16_u align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load32_s align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load32_s align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load32_u align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load32_u align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (i64.load align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (f32.load align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (f32.load align=7 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (f64.load align=0 (i32.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (drop (f64.load align=7 (i32.const 0)))))" - ) - "alignment" -) - -(assert_malformed - (module quote - "(module (memory 0) (func (i32.store8 align=0 (i32.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i32.store8 align=7 (i32.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i32.store16 align=0 (i32.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i32.store16 align=7 (i32.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i32.store align=0 (i32.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i32.store align=7 (i32.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i64.store8 align=0 (i32.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i64.store8 align=7 (i32.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i64.store16 align=0 (i32.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i64.store16 align=7 (i32.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i64.store32 align=0 (i32.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i64.store32 align=7 (i32.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i64.store align=0 (i32.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (i64.store align=7 (i32.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (f32.store align=0 (i32.const 0) (f32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (f32.store align=7 (i32.const 0) (f32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (f64.store align=0 (i32.const 0) (f32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory 0) (func (f64.store align=7 (i32.const 0) (f32.const 0))))" - ) - "alignment" -) - -(assert_invalid - (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) - "alignment must not be larger than natural" -) - -(assert_invalid - (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) - "alignment must not be larger than natural" -) - -(assert_invalid - (module (memory 0) (func (i32.store8 align=2 (i32.const 0) (i32.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (i32.store16 align=4 (i32.const 0) (i32.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (i32.store align=8 (i32.const 0) (i32.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (i64.store8 align=2 (i32.const 0) (i64.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (i64.store16 align=4 (i32.const 0) (i64.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (i64.store32 align=8 (i32.const 0) (i64.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (i64.store align=16 (i32.const 0) (i64.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (f32.store align=8 (i32.const 0) (f32.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory 0) (func (f64.store align=16 (i32.const 0) (f64.const 0)))) - "alignment must not be larger than natural" -) - -;; Test aligned and unaligned read/write - -(module - (memory 1) - - ;; $default: natural alignment, $1: align=1, $2: align=2, $4: align=4, $8: align=8 - - (func (export "f32_align_switch") (param i32) (result f32) - (local f32 f32) - (local.set 1 (f32.const 10.0)) - (block $4 - (block $2 - (block $1 - (block $default - (block $0 - (br_table $0 $default $1 $2 $4 (local.get 0)) - ) ;; 0 - (f32.store (i32.const 0) (local.get 1)) - (local.set 2 (f32.load (i32.const 0))) - (br $4) - ) ;; default - (f32.store align=1 (i32.const 0) (local.get 1)) - (local.set 2 (f32.load align=1 (i32.const 0))) - (br $4) - ) ;; 1 - (f32.store align=2 (i32.const 0) (local.get 1)) - (local.set 2 (f32.load align=2 (i32.const 0))) - (br $4) - ) ;; 2 - (f32.store align=4 (i32.const 0) (local.get 1)) - (local.set 2 (f32.load align=4 (i32.const 0))) - ) ;; 4 - (local.get 2) - ) - - (func (export "f64_align_switch") (param i32) (result f64) - (local f64 f64) - (local.set 1 (f64.const 10.0)) - (block $8 - (block $4 - (block $2 - (block $1 - (block $default - (block $0 - (br_table $0 $default $1 $2 $4 $8 (local.get 0)) - ) ;; 0 - (f64.store (i32.const 0) (local.get 1)) - (local.set 2 (f64.load (i32.const 0))) - (br $8) - ) ;; default - (f64.store align=1 (i32.const 0) (local.get 1)) - (local.set 2 (f64.load align=1 (i32.const 0))) - (br $8) - ) ;; 1 - (f64.store align=2 (i32.const 0) (local.get 1)) - (local.set 2 (f64.load align=2 (i32.const 0))) - (br $8) - ) ;; 2 - (f64.store align=4 (i32.const 0) (local.get 1)) - (local.set 2 (f64.load align=4 (i32.const 0))) - (br $8) - ) ;; 4 - (f64.store align=8 (i32.const 0) (local.get 1)) - (local.set 2 (f64.load align=8 (i32.const 0))) - ) ;; 8 - (local.get 2) - ) - - ;; $8s: i32/i64.load8_s, $8u: i32/i64.load8_u, $16s: i32/i64.load16_s, $16u: i32/i64.load16_u, $32: i32.load - ;; $32s: i64.load32_s, $32u: i64.load32_u, $64: i64.load - - (func (export "i32_align_switch") (param i32 i32) (result i32) - (local i32 i32) - (local.set 2 (i32.const 10)) - (block $32 - (block $16u - (block $16s - (block $8u - (block $8s - (block $0 - (br_table $0 $8s $8u $16s $16u $32 (local.get 0)) - ) ;; 0 - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i32.store8 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load8_s (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i32.store8 align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load8_s align=1 (i32.const 0))) - ) - ) - (br $32) - ) ;; 8s - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i32.store8 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load8_u (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i32.store8 align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load8_u align=1 (i32.const 0))) - ) - ) - (br $32) - ) ;; 8u - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i32.store16 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load16_s (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i32.store16 align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load16_s align=1 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i32.store16 align=2 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load16_s align=2 (i32.const 0))) - ) - ) - (br $32) - ) ;; 16s - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i32.store16 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load16_u (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i32.store16 align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load16_u align=1 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i32.store16 align=2 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load16_u align=2 (i32.const 0))) - ) - ) - (br $32) - ) ;; 16u - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i32.store (i32.const 0) (local.get 2)) - (local.set 3 (i32.load (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i32.store align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load align=1 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i32.store align=2 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load align=2 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 4)) - (then - (i32.store align=4 (i32.const 0) (local.get 2)) - (local.set 3 (i32.load align=4 (i32.const 0))) - ) - ) - ) ;; 32 - (local.get 3) - ) - - (func (export "i64_align_switch") (param i32 i32) (result i64) - (local i64 i64) - (local.set 2 (i64.const 10)) - (block $64 - (block $32u - (block $32s - (block $16u - (block $16s - (block $8u - (block $8s - (block $0 - (br_table $0 $8s $8u $16s $16u $32s $32u $64 (local.get 0)) - ) ;; 0 - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store8 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load8_s (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store8 align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load8_s align=1 (i32.const 0))) - ) - ) - (br $64) - ) ;; 8s - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store8 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load8_u (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store8 align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load8_u align=1 (i32.const 0))) - ) - ) - (br $64) - ) ;; 8u - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store16 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load16_s (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store16 align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load16_s align=1 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i64.store16 align=2 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load16_s align=2 (i32.const 0))) - ) - ) - (br $64) - ) ;; 16s - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store16 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load16_u (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store16 align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load16_u align=1 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i64.store16 align=2 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load16_u align=2 (i32.const 0))) - ) - ) - (br $64) - ) ;; 16u - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store32 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load32_s (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store32 align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load32_s align=1 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i64.store32 align=2 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load32_s align=2 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 4)) - (then - (i64.store32 align=4 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load32_s align=4 (i32.const 0))) - ) - ) - (br $64) - ) ;; 32s - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store32 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load32_u (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store32 align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load32_u align=1 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i64.store32 align=2 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load32_u align=2 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 4)) - (then - (i64.store32 align=4 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load32_u align=4 (i32.const 0))) - ) - ) - (br $64) - ) ;; 32u - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store (i32.const 0) (local.get 2)) - (local.set 3 (i64.load (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store align=1 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load align=1 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i64.store align=2 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load align=2 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 4)) - (then - (i64.store align=4 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load align=4 (i32.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 8)) - (then - (i64.store align=8 (i32.const 0) (local.get 2)) - (local.set 3 (i64.load align=8 (i32.const 0))) - ) - ) - ) ;; 64 - (local.get 3) - ) -) - -(assert_return (invoke "f32_align_switch" (i32.const 0)) (f32.const 10.0)) -(assert_return (invoke "f32_align_switch" (i32.const 1)) (f32.const 10.0)) -(assert_return (invoke "f32_align_switch" (i32.const 2)) (f32.const 10.0)) -(assert_return (invoke "f32_align_switch" (i32.const 3)) (f32.const 10.0)) - -(assert_return (invoke "f64_align_switch" (i32.const 0)) (f64.const 10.0)) -(assert_return (invoke "f64_align_switch" (i32.const 1)) (f64.const 10.0)) -(assert_return (invoke "f64_align_switch" (i32.const 2)) (f64.const 10.0)) -(assert_return (invoke "f64_align_switch" (i32.const 3)) (f64.const 10.0)) -(assert_return (invoke "f64_align_switch" (i32.const 4)) (f64.const 10.0)) - -(assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 0)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 1)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 0)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 1)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 0)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 1)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 2)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 0)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 1)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 2)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 0)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 1)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 2)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 4)) (i32.const 10)) - -(assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 2)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 2)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 2)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 4)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 2)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 4)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 2)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 4)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 8)) (i64.const 10)) - -;; Test that an i64 store with 4-byte alignment that's 4 bytes out of bounds traps without storing anything - -(module - (memory 1) - (func (export "store") (param i32 i64) - (i64.store align=4 (local.get 0) (local.get 1)) - ) - (func (export "load") (param i32) (result i32) - (i32.load (local.get 0)) - ) -) - -(assert_trap (invoke "store" (i32.const 65532) (i64.const -1)) "out of bounds memory access") -;; No memory was changed -(assert_return (invoke "load" (i32.const 65532)) (i32.const 0)) diff --git a/test/spec/block.wast b/test/spec/block.wast deleted file mode 100644 index 625dd98fbfc..00000000000 --- a/test/spec/block.wast +++ /dev/null @@ -1,1120 +0,0 @@ -;; Test `block` operator - -(module - ;; Auxiliary definition - (memory 1) - - (func $dummy) - - (func (export "empty") - (block) - (block $l) - ) - - (func (export "singular") (result i32) - (block (nop)) - (block (result i32) (i32.const 7)) - ) - - (func (export "multi") (result i32) - (block (call $dummy) (call $dummy) (call $dummy) (call $dummy)) - (block (result i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 8)) - ) - - (func (export "nested") (result i32) - (block (result i32) - (block (call $dummy) (block) (nop)) - (block (result i32) (call $dummy) (i32.const 9)) - ) - ) - - (func (export "deep") (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (block (result i32) (block (result i32) - (call $dummy) (i32.const 150) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - ) - - (func (export "as-select-first") (result i32) - (select (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 3)) - ) - (func (export "as-select-mid") (result i32) - (select (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 3)) - ) - (func (export "as-select-last") (result i32) - (select (i32.const 2) (i32.const 3) (block (result i32) (i32.const 1))) - ) - - (func (export "as-loop-first") (result i32) - (loop (result i32) (block (result i32) (i32.const 1)) (call $dummy) (call $dummy)) - ) - (func (export "as-loop-mid") (result i32) - (loop (result i32) (call $dummy) (block (result i32) (i32.const 1)) (call $dummy)) - ) - (func (export "as-loop-last") (result i32) - (loop (result i32) (call $dummy) (call $dummy) (block (result i32) (i32.const 1))) - ) - - (func (export "as-if-condition") - (block (result i32) (i32.const 1)) (if (then (call $dummy))) - ) - (func (export "as-if-then") (result i32) - (if (result i32) (i32.const 1) (then (block (result i32) (i32.const 1))) (else (i32.const 2))) - ) - (func (export "as-if-else") (result i32) - (if (result i32) (i32.const 1) (then (i32.const 2)) (else (block (result i32) (i32.const 1)))) - ) - - (func (export "as-br_if-first") (result i32) - (block (result i32) (br_if 0 (block (result i32) (i32.const 1)) (i32.const 2))) - ) - (func (export "as-br_if-last") (result i32) - (block (result i32) (br_if 0 (i32.const 2) (block (result i32) (i32.const 1)))) - ) - - (func (export "as-br_table-first") (result i32) - (block (result i32) (block (result i32) (i32.const 1)) (i32.const 2) (br_table 0 0)) - ) - (func (export "as-br_table-last") (result i32) - (block (result i32) (i32.const 2) (block (result i32) (i32.const 1)) (br_table 0 0)) - ) - - (func $func (param i32 i32) (result i32) (local.get 0)) - (type $check (func (param i32 i32) (result i32))) - (table funcref (elem $func)) - (func (export "as-call_indirect-first") (result i32) - (block (result i32) - (call_indirect (type $check) - (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 0) - ) - ) - ) - (func (export "as-call_indirect-mid") (result i32) - (block (result i32) - (call_indirect (type $check) - (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 0) - ) - ) - ) - (func (export "as-call_indirect-last") (result i32) - (block (result i32) - (call_indirect (type $check) - (i32.const 1) (i32.const 2) (block (result i32) (i32.const 0)) - ) - ) - ) - - (func (export "as-store-first") - (block (result i32) (i32.const 1)) (i32.const 1) (i32.store) - ) - (func (export "as-store-last") - (i32.const 10) (block (result i32) (i32.const 1)) (i32.store) - ) - - (func (export "as-memory.grow-value") (result i32) - (memory.grow (block (result i32) (i32.const 1))) - ) - - (func $f (param i32) (result i32) (local.get 0)) - - (func (export "as-call-value") (result i32) - (call $f (block (result i32) (i32.const 1))) - ) - (func (export "as-return-value") (result i32) - (block (result i32) (i32.const 1)) (return) - ) - (func (export "as-drop-operand") - (drop (block (result i32) (i32.const 1))) - ) - (func (export "as-br-value") (result i32) - (block (result i32) (br 0 (block (result i32) (i32.const 1)))) - ) - (func (export "as-local.set-value") (result i32) - (local i32) (local.set 0 (block (result i32) (i32.const 1))) (local.get 0) - ) - (func (export "as-local.tee-value") (result i32) - (local i32) (local.tee 0 (block (result i32) (i32.const 1))) - ) - (global $a (mut i32) (i32.const 10)) - (func (export "as-global.set-value") (result i32) - (global.set $a (block (result i32) (i32.const 1))) - (global.get $a) - ) - - (func (export "as-load-operand") (result i32) - (i32.load (block (result i32) (i32.const 1))) - ) - - (func (export "as-unary-operand") (result i32) - (i32.ctz (block (result i32) (call $dummy) (i32.const 13))) - ) - (func (export "as-binary-operand") (result i32) - (i32.mul - (block (result i32) (call $dummy) (i32.const 3)) - (block (result i32) (call $dummy) (i32.const 4)) - ) - ) - (func (export "as-test-operand") (result i32) - (i32.eqz (block (result i32) (call $dummy) (i32.const 13))) - ) - (func (export "as-compare-operand") (result i32) - (f32.gt - (block (result f32) (call $dummy) (f32.const 3)) - (block (result f32) (call $dummy) (f32.const 3)) - ) - ) - - (func (export "break-bare") (result i32) - (block (br 0) (unreachable)) - (block (br_if 0 (i32.const 1)) (unreachable)) - (block (br_table 0 (i32.const 0)) (unreachable)) - (block (br_table 0 0 0 (i32.const 1)) (unreachable)) - (i32.const 19) - ) - (func (export "break-value") (result i32) - (block (result i32) (br 0 (i32.const 18)) (i32.const 19)) - ) - (func (export "break-repeated") (result i32) - (block (result i32) - (br 0 (i32.const 18)) - (br 0 (i32.const 19)) - (drop (br_if 0 (i32.const 20) (i32.const 0))) - (drop (br_if 0 (i32.const 20) (i32.const 1))) - (br 0 (i32.const 21)) - (br_table 0 (i32.const 22) (i32.const 4)) - (br_table 0 0 0 (i32.const 23) (i32.const 1)) - (i32.const 21) - ) - ) - (func (export "break-inner") (result i32) - (local i32) - (local.set 0 (i32.const 0)) - (local.set 0 (i32.add (local.get 0) (block (result i32) (block (result i32) (br 1 (i32.const 0x1)))))) - (local.set 0 (i32.add (local.get 0) (block (result i32) (block (br 0)) (i32.const 0x2)))) - (local.set 0 - (i32.add (local.get 0) (block (result i32) (i32.ctz (br 0 (i32.const 0x4))))) - ) - (local.set 0 - (i32.add (local.get 0) (block (result i32) (i32.ctz (block (result i32) (br 1 (i32.const 0x8)))))) - ) - (local.get 0) - ) - - (func (export "effects") (result i32) - (local i32) - (block - (local.set 0 (i32.const 1)) - (local.set 0 (i32.mul (local.get 0) (i32.const 3))) - (local.set 0 (i32.sub (local.get 0) (i32.const 5))) - (local.set 0 (i32.mul (local.get 0) (i32.const 7))) - (br 0) - (local.set 0 (i32.mul (local.get 0) (i32.const 100))) - ) - (i32.eq (local.get 0) (i32.const -14)) - ) -) - -(assert_return (invoke "empty")) -(assert_return (invoke "singular") (i32.const 7)) -(assert_return (invoke "multi") (i32.const 8)) -(assert_return (invoke "nested") (i32.const 9)) -(assert_return (invoke "deep") (i32.const 150)) - -(assert_return (invoke "as-select-first") (i32.const 1)) -(assert_return (invoke "as-select-mid") (i32.const 2)) -(assert_return (invoke "as-select-last") (i32.const 2)) - -(assert_return (invoke "as-loop-first") (i32.const 1)) -(assert_return (invoke "as-loop-mid") (i32.const 1)) -(assert_return (invoke "as-loop-last") (i32.const 1)) - -(assert_return (invoke "as-if-condition")) -(assert_return (invoke "as-if-then") (i32.const 1)) -(assert_return (invoke "as-if-else") (i32.const 2)) - -(assert_return (invoke "as-br_if-first") (i32.const 1)) -(assert_return (invoke "as-br_if-last") (i32.const 2)) - -(assert_return (invoke "as-br_table-first") (i32.const 1)) -(assert_return (invoke "as-br_table-last") (i32.const 2)) - -(assert_return (invoke "as-call_indirect-first") (i32.const 1)) -(assert_return (invoke "as-call_indirect-mid") (i32.const 2)) -(assert_return (invoke "as-call_indirect-last") (i32.const 1)) - -(assert_return (invoke "as-store-first")) -(assert_return (invoke "as-store-last")) - -(assert_return (invoke "as-memory.grow-value") (i32.const 1)) -(assert_return (invoke "as-call-value") (i32.const 1)) -(assert_return (invoke "as-return-value") (i32.const 1)) -(assert_return (invoke "as-drop-operand")) -(assert_return (invoke "as-br-value") (i32.const 1)) -(assert_return (invoke "as-local.set-value") (i32.const 1)) -(assert_return (invoke "as-local.tee-value") (i32.const 1)) -(assert_return (invoke "as-global.set-value") (i32.const 1)) -(assert_return (invoke "as-load-operand") (i32.const 1)) - -(assert_return (invoke "as-unary-operand") (i32.const 0)) -(assert_return (invoke "as-binary-operand") (i32.const 12)) -(assert_return (invoke "as-test-operand") (i32.const 0)) -(assert_return (invoke "as-compare-operand") (i32.const 0)) - -(assert_return (invoke "break-bare") (i32.const 19)) -(assert_return (invoke "break-value") (i32.const 18)) -(assert_return (invoke "break-repeated") (i32.const 18)) -(assert_return (invoke "break-inner") (i32.const 0xf)) - -(assert_return (invoke "effects") (i32.const 1)) - -(assert_invalid - (module (func $type-empty-i32 (result i32) (block))) - "type mismatch" -) -(assert_invalid - (module (func $type-empty-i64 (result i64) (block))) - "type mismatch" -) -(assert_invalid - (module (func $type-empty-f32 (result f32) (block))) - "type mismatch" -) -(assert_invalid - (module (func $type-empty-f64 (result f64) (block))) - "type mismatch" -) - -(assert_invalid - (module (func $type-value-i32-vs-void - (block (i32.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-i64-vs-void - (block (i64.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-f32-vs-void - (block (f32.const 1.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-f64-vs-void - (block (f64.const 1.0)) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-value-empty-vs-i32 (result i32) - (block (result i32)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-empty-vs-i64 (result i64) - (block (result i64)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-empty-vs-f32 (result f32) - (block (result f32)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-empty-vs-f64 (result f64) - (block (result f64)) - )) - "type mismatch" -) - -(assert_invalid - (module - (func $type-value-empty-in-block - (i32.const 0) - (block (block (result i32)) (drop)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func $type-value-empty-in-loop - (i32.const 0) - (loop (block (result i32)) (drop)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func $type-value-empty-in-then - (i32.const 0) (i32.const 0) - (if (then (block (result i32)) (drop))) - ) - ) - "type mismatch" -) - -(assert_invalid - (module (func $type-value-void-vs-i32 (result i32) - (block (result i32) (nop)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-void-vs-i64 (result i64) - (block (result i64) (nop)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-void-vs-f32 (result f32) - (block (result f32) (nop)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-void-vs-f64 (result f64) - (block (result f64) (nop)) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-value-i32-vs-i64 (result i32) - (block (result i32) (i64.const 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-i32-vs-f32 (result i32) - (block (result i32) (f32.const 0.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-i32-vs-f64 (result i32) - (block (result i32) (f64.const 0.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-i64-vs-i32 (result i64) - (block (result i64) (i32.const 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-i64-vs-f32 (result i64) - (block (result i64) (f32.const 0.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-i64-vs-f64 (result i64) - (block (result i64) (f64.const 0.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-f32-vs-i32 (result f32) - (block (result f32) (i32.const 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-f32-vs-i64 (result f32) - (block (result f32) (i64.const 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-f32-vs-f64 (result f32) - (block (result f32) (f64.const 0.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-f64-vs-i32 (result f64) - (block (result f64) (i32.const 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-f64-vs-i64 (result f64) - (block (result f64) (i64.const 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-f64-vs-f32 (result f32) - (block (result f64) (f32.const 0.0)) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-value-unreached-select-i32-i64 (result i32) - (block (result i64) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select-i32-f32 (result i32) - (block (result f32) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select-i32-f64 (result i32) - (block (result f64) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select-i64-i32 (result i64) - (block (result i32) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select-i64-f32 (result i64) - (block (result f32) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select-i64-f64 (result i64) - (block (result f64) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select-f32-i32 (result f32) - (block (result i32) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select-f32-i64 (result f32) - (block (result i64) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select-f32-f64 (result f32) - (block (result f64) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select-f64-i32 (result f64) - (block (result i32) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select-f64-i64 (result f64) - (block (result i64) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select-f64-f32 (result f64) - (block (result f32) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-last-void-vs-i32 (result i32) - (block (result i32) (br 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-last-void-vs-i64 (result i64) - (block (result i64) (br 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-last-void-vs-f32 (result f32) - (block (result f32) (br 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-last-void-vs-f64 (result f64) - (block (result f64) (br 0)) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-empty-vs-i32 (result i32) - (block (result i32) (br 0) (i32.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-empty-vs-i64 (result i64) - (block (result i64) (br 0) (i64.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-empty-vs-f32 (result f32) - (block (result f32) (br 0) (f32.const 1.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-empty-vs-f64 (result f64) - (block (result f64) (br 0) (f64.const 1.0)) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-void-vs-i32 (result i32) - (block (result i32) (br 0 (nop)) (i32.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-void-vs-i64 (result i64) - (block (result i64) (br 0 (nop)) (i64.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-void-vs-f32 (result f32) - (block (result f32) (br 0 (nop)) (f32.const 1.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-void-vs-f64 (result f64) - (block (result f64) (br 0 (nop)) (f64.const 1.0)) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-i32-vs-i64 (result i32) - (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-i32-vs-f32 (result i32) - (block (result i32) (br 0 (f32.const 1.0)) (i32.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-i32-vs-f64 (result i32) - (block (result i32) (br 0 (f64.const 1.0)) (i32.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-i64-vs-i32 (result i64) - (block (result i64) (br 0 (i32.const 1)) (i64.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-i64-vs-f32 (result i64) - (block (result i64) (br 0 (f32.const 1.0)) (i64.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-i64-vs-f64 (result i64) - (block (result i64) (br 0 (f64.const 1.0)) (i64.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-f32-vs-i32 (result f32) - (block (result f32) (br 0 (i32.const 1)) (f32.const 1.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-f32-vs-i64 (result f32) - (block (result f32) (br 0 (i64.const 1)) (f32.const 1.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-f32-vs-f64 (result f32) - (block (result f32) (br 0 (f64.const 1.0)) (f32.const 1.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-f64-vs-i32 (result f64) - (block (result i64) (br 0 (i32.const 1)) (f64.const 1.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-f64-vs-i64 (result f64) - (block (result f64) (br 0 (i64.const 1)) (f64.const 1.0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-f64-vs-f32 (result f64) - (block (result f64) (br 0 (f32.const 1.0)) (f64.const 1)) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-first-void-vs-i32 (result i32) - (block (result i32) (br 0 (nop)) (br 0 (i32.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-void-vs-i64 (result i64) - (block (result i64) (br 0 (nop)) (br 0 (i64.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-void-vs-f32 (result f32) - (block (result f32) (br 0 (nop)) (br 0 (f32.const 1.0))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-void-vs-f64 (result f64) - (block (result f64) (br 0 (nop)) (br 0 (f64.const 1.0))) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-first-i32-vs-i64 (result i32) - (block (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-i32-vs-f32 (result i32) - (block (result i32) (br 0 (f32.const 1.0)) (br 0 (i32.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-i32-vs-f64 (result i32) - (block (result i32) (br 0 (f64.const 1.0)) (br 0 (i32.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-i64-vs-i32 (result i64) - (block (result i64) (br 0 (i32.const 1)) (br 0 (i64.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-i64-vs-f32 (result i64) - (block (result i64) (br 0 (f32.const 1.0)) (br 0 (i64.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-i64-vs-f64 (result i64) - (block (result i64) (br 0 (f64.const 1.0)) (br 0 (i64.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-f32-vs-i32 (result f32) - (block (result f32) (br 0 (i32.const 1)) (br 0 (f32.const 1.0))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-f32-vs-i64 (result f32) - (block (result f32) (br 0 (i64.const 1)) (br 0 (f32.const 1.0))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-f32-vs-f64 (result f32) - (block (result f32) (br 0 (f64.const 1.0)) (br 0 (f32.const 1.0))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-f64-vs-i32 (result f64) - (block (result f64) (br 0 (i32.const 1)) (br 0 (f64.const 1.0))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-f64-vs-i64 (result f64) - (block (result f64) (br 0 (i64.const 1)) (br 0 (f64.const 1.0))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-first-f64-vs-f32 (result f64) - (block (result f64) (br 0 (f32.const 1.0)) (br 0 (f64.const 1.0))) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-nested-i32-vs-void - (block (result i32) (block (result i32) (br 1 (i32.const 1))) (br 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-i64-vs-void - (block (result i64) (block (result i64) (br 1 (i64.const 1))) (br 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-f32-vs-void - (block (result f32) (block (result f32) (br 1 (f32.const 1.0))) (br 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-f64-vs-void - (block (result f64) (block (result f64) (br 1 (f64.const 1.0))) (br 0)) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-nested-empty-vs-i32 (result i32) - (block (result i32) (block (br 1)) (br 0 (i32.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-empty-vs-i64 (result i64) - (block (result i64) (block (br 1)) (br 0 (i64.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-empty-vs-f32 (result f32) - (block (result f32) (block (br 1)) (br 0 (f32.const 1.0))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-empty-vs-f64 (result f64) - (block (result f64) (block (br 1)) (br 0 (f64.const 1))) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-nested-void-vs-i32 (result i32) - (block (result i32) (block (result i32) (br 1 (nop))) (br 0 (i32.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-void-vs-i64 (result i64) - (block (result i64) (block (result i64) (br 1 (nop))) (br 0 (i64.const 1))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-void-vs-f32 (result f32) - (block (result f32) (block (result f32) (br 1 (nop))) (br 0 (f32.const 1.0))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-void-vs-f64 (result f64) - (block (result f64) (block (result f64) (br 1 (nop))) (br 0 (f64.const 1.0))) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-nested-i32-vs-i64 (result i32) - (block (result i32) - (block (result i32) (br 1 (i64.const 1))) (br 0 (i32.const 1)) - ) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-i32-vs-f32 (result i32) - (block (result i32) - (block (result i32) (br 1 (f32.const 1.0))) (br 0 (i32.const 1)) - ) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-i32-vs-f64 (result i32) - (block (result i32) - (block (result i32) (br 1 (f64.const 1.0))) (br 0 (i32.const 1)) - ) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-i64-vs-i32 (result i64) - (block (result i64) - (block (result i64) (br 1 (i32.const 1))) (br 0 (i64.const 1)) - ) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-i64-vs-f32 (result i64) - (block (result i64) - (block (result i64) (br 1 (f32.const 1.0))) (br 0 (i64.const 1)) - ) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-i64-vs-f64 (result i64) - (block (result i64) - (block (result i64) (br 1 (f64.const 1.0))) (br 0 (i64.const 1)) - ) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-f32-vs-i32 (result f32) - (block (result f32) - (block (result f32) (br 1 (i32.const 1))) (br 0 (f32.const 1.0)) - ) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-f32-vs-i64 (result f32) - (block (result f32) - (block (result f32) (br 1 (i64.const 1))) (br 0 (f32.const 1.0)) - ) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-f32-vs-f64 (result f32) - (block (result f32) - (block (result f32) (br 1 (f64.const 1.0))) (br 0 (f32.const 1.0)) - ) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-f64-vs-i32 (result f64) - (block (result f64) - (block (result f64) (br 1 (i32.const 1))) (br 0 (f64.const 1.0)) - ) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-f64-vs-i64 (result f64) - (block (result f64) - (block (result f64) (br 1 (i64.const 1))) (br 0 (f64.const 1.0)) - ) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-nested-f64-vs-f32 (result f64) - (block (result f64) - (block (result f64) (br 1 (f32.const 1.0))) (br 0 (f64.const 1.0)) - ) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-operand-empty-vs-i32 (result i32) - (i32.ctz (block (br 0))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-empty-vs-i64 (result i64) - (i64.ctz (block (br 0))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-empty-vs-f32 (result f32) - (f32.floor (block (br 0))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-empty-vs-f64 (result f64) - (f64.floor (block (br 0))) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-operand-void-vs-i32 (result i32) - (i32.ctz (block (br 0 (nop)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-void-vs-i64 (result i64) - (i64.ctz (block (br 0 (nop)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-void-vs-f32 (result f32) - (f32.floor (block (br 0 (nop)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-void-vs-f64 (result f64) - (f64.floor (block (br 0 (nop)))) - )) - "type mismatch" -) - -(assert_invalid - (module (func $type-break-operand-i32-vs-i64 (result i32) - (i64.ctz (block (br 0 (i64.const 9)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-i32-vs-f32 (result i32) - (f32.floor (block (br 0 (f32.const 9.0)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-i32-vs-f64 (result i32) - (f64.floor (block (br 0 (f64.const 9.0)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-i64-vs-i32 (result i64) - (i32.ctz (block (br 0 (i32.const 9)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-i64-vs-f32 (result i64) - (f32.floor (block (br 0 (f32.const 9.0)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-i64-vs-f64 (result i64) - (f64.floor (block (br 0 (f64.const 9.0)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-f32-vs-i32 (result f32) - (i32.ctz (block (br 0 (i32.const 9)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-f32-vs-i64 (result f32) - (i64.ctz (block (br 0 (i64.const 9)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-f32-vs-f64 (result f32) - (f64.floor (block (br 0 (f64.const 9.0)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-f64-vs-i32 (result f64) - (i32.ctz (block (br 0 (i32.const 9)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-f64-vs-i64 (result f64) - (i64.ctz (block (br 0 (i64.const 9)))) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-break-operand-f64-vs-f32 (result f64) - (f32.floor (block (br 0 (f32.const 9.0)))) - )) - "type mismatch" -) - - -(assert_malformed - (module quote "(func block end $l)") - "mismatching label" -) -(assert_malformed - (module quote "(func block $a end $l)") - "mismatching label" -) diff --git a/test/spec/br_on_null.wast b/test/spec/br_on_null.wast deleted file mode 100644 index e3c45ece763..00000000000 --- a/test/spec/br_on_null.wast +++ /dev/null @@ -1,58 +0,0 @@ -(module - (type $t (func (result i32))) - - (func $nn (param $r (ref $t)) (result i32) - (block $l - (return (call_ref $t (br_on_null $l (local.get $r)))) - ) - (i32.const -1) - ) - (func $n (param $r (ref null $t)) (result i32) - (block $l - (return (call_ref $t (br_on_null $l (local.get $r)))) - ) - (i32.const -1) - ) - - (func $f (result i32) (i32.const 7)) - - (func (export "nullable-null") (result i32) (call $n (ref.null $t))) - (func (export "nonnullable-f") (result i32) (call $nn (ref.func $f))) - (func (export "nullable-f") (result i32) (call $n (ref.func $f))) - - (func (export "unreachable") (result i32) - (block $l - (return (call_ref $t (br_on_null $l (unreachable)))) - ) - (i32.const -1) - ) -) - -(assert_trap (invoke "unreachable") "unreachable") - -(assert_return (invoke "nullable-null") (i32.const -1)) -(assert_return (invoke "nonnullable-f") (i32.const 7)) -(assert_return (invoke "nullable-f") (i32.const 7)) - -(module - (type $t (func)) - (func (param $r (ref $t)) (drop (br_on_null 0 (local.get $r)))) - (func (param $r (ref func)) (drop (br_on_null 0 (local.get $r)))) - (func (param $r (ref extern)) (drop (br_on_null 0 (local.get $r)))) -) - -(assert_invalid - ;; the same module as the first one in this file, but with a type added to - ;; the block - (module - (type $t (func (result i32))) - - (func $nn (param $r (ref $t)) (result i32) - (block $l (ref null $t) ;; br_on_null sends no value; a br to here is bad - (return (call_ref $t (br_on_null $l (local.get $r)))) - ) - (i32.const -1) - ) - ) - "bad break type" -) diff --git a/test/spec/call_indirect.wast b/test/spec/call_indirect.wast deleted file mode 100644 index 87d1df75a5f..00000000000 --- a/test/spec/call_indirect.wast +++ /dev/null @@ -1,942 +0,0 @@ -;; Test `call_indirect` operator - -(module - ;; Auxiliary definitions - (type $proc (func)) - (type $out-i32 (func (result i32))) - (type $out-i64 (func (result i64))) - (type $out-f32 (func (result f32))) - (type $out-f64 (func (result f64))) - (type $over-i32 (func (param i32) (result i32))) - (type $over-i64 (func (param i64) (result i64))) - (type $over-f32 (func (param f32) (result f32))) - (type $over-f64 (func (param f64) (result f64))) - (type $f32-i32 (func (param f32 i32) (result i32))) - (type $i32-i64 (func (param i32 i64) (result i64))) - (type $f64-f32 (func (param f64 f32) (result f32))) - (type $i64-f64 (func (param i64 f64) (result f64))) - (type $over-i32-duplicate (func (param i32) (result i32))) - (type $over-i64-duplicate (func (param i64) (result i64))) - (type $over-f32-duplicate (func (param f32) (result f32))) - (type $over-f64-duplicate (func (param f64) (result f64))) - - (func $const-i32 (type $out-i32) (i32.const 0x132)) - (func $const-i64 (type $out-i64) (i64.const 0x164)) - (func $const-f32 (type $out-f32) (f32.const 0xf32)) - (func $const-f64 (type $out-f64) (f64.const 0xf64)) - - (func $id-i32 (type $over-i32) (local.get 0)) - (func $id-i64 (type $over-i64) (local.get 0)) - (func $id-f32 (type $over-f32) (local.get 0)) - (func $id-f64 (type $over-f64) (local.get 0)) - - (func $i32-i64 (type $i32-i64) (local.get 1)) - (func $i64-f64 (type $i64-f64) (local.get 1)) - (func $f32-i32 (type $f32-i32) (local.get 1)) - (func $f64-f32 (type $f64-f32) (local.get 1)) - - (func $over-i32-duplicate (type $over-i32-duplicate) (local.get 0)) - (func $over-i64-duplicate (type $over-i64-duplicate) (local.get 0)) - (func $over-f32-duplicate (type $over-f32-duplicate) (local.get 0)) - (func $over-f64-duplicate (type $over-f64-duplicate) (local.get 0)) - - (table funcref - (elem - $const-i32 $const-i64 $const-f32 $const-f64 - $id-i32 $id-i64 $id-f32 $id-f64 - $f32-i32 $i32-i64 $f64-f32 $i64-f64 - $fac-i64 $fib-i64 $even $odd - $runaway $mutual-runaway1 $mutual-runaway2 - $over-i32-duplicate $over-i64-duplicate - $over-f32-duplicate $over-f64-duplicate - $fac-i32 $fac-f32 $fac-f64 - $fib-i32 $fib-f32 $fib-f64 - ) - ) - - ;; Syntax - - (func - (call_indirect (i32.const 0)) - (call_indirect (param i64) (i64.const 0) (i32.const 0)) - (call_indirect (param i64) (param) (param f64 i32 i64) - (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) - ) - (call_indirect (result) (i32.const 0)) - (drop (i32.eqz (call_indirect (result i32) (i32.const 0)))) - (drop (i32.eqz (call_indirect (result i32) (result) (i32.const 0)))) - (drop (i32.eqz - (call_indirect (param i64) (result i32) (i64.const 0) (i32.const 0)) - )) - (drop (i32.eqz - (call_indirect - (param) (param i64) (param) (param f64 i32 i64) (param) (param) - (result) (result i32) (result) (result) - (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) - ) - )) - (drop (i64.eqz - (call_indirect (type $over-i64) (param i64) (result i64) - (i64.const 0) (i32.const 0) - ) - )) - ) - - ;; Typing - - (func (export "type-i32") (result i32) - (call_indirect (type $out-i32) (i32.const 0)) - ) - (func (export "type-i64") (result i64) - (call_indirect (type $out-i64) (i32.const 1)) - ) - (func (export "type-f32") (result f32) - (call_indirect (type $out-f32) (i32.const 2)) - ) - (func (export "type-f64") (result f64) - (call_indirect (type $out-f64) (i32.const 3)) - ) - - (func (export "type-index") (result i64) - (call_indirect (type $over-i64) (i64.const 100) (i32.const 5)) - ) - - (func (export "type-first-i32") (result i32) - (call_indirect (type $over-i32) (i32.const 32) (i32.const 4)) - ) - (func (export "type-first-i64") (result i64) - (call_indirect (type $over-i64) (i64.const 64) (i32.const 5)) - ) - (func (export "type-first-f32") (result f32) - (call_indirect (type $over-f32) (f32.const 1.32) (i32.const 6)) - ) - (func (export "type-first-f64") (result f64) - (call_indirect (type $over-f64) (f64.const 1.64) (i32.const 7)) - ) - - (func (export "type-second-i32") (result i32) - (call_indirect (type $f32-i32) (f32.const 32.1) (i32.const 32) (i32.const 8)) - ) - (func (export "type-second-i64") (result i64) - (call_indirect (type $i32-i64) (i32.const 32) (i64.const 64) (i32.const 9)) - ) - (func (export "type-second-f32") (result f32) - (call_indirect (type $f64-f32) (f64.const 64) (f32.const 32) (i32.const 10)) - ) - (func (export "type-second-f64") (result f64) - (call_indirect (type $i64-f64) (i64.const 64) (f64.const 64.1) (i32.const 11)) - ) - - ;; Dispatch - - (func (export "dispatch") (param i32 i64) (result i64) - (call_indirect (type $over-i64) (local.get 1) (local.get 0)) - ) - - (func (export "dispatch-structural-i64") (param i32) (result i64) - (call_indirect (type $over-i64-duplicate) (i64.const 9) (local.get 0)) - ) - (func (export "dispatch-structural-i32") (param i32) (result i32) - (call_indirect (type $over-i32-duplicate) (i32.const 9) (local.get 0)) - ) - (func (export "dispatch-structural-f32") (param i32) (result f32) - (call_indirect (type $over-f32-duplicate) (f32.const 9.0) (local.get 0)) - ) - (func (export "dispatch-structural-f64") (param i32) (result f64) - (call_indirect (type $over-f64-duplicate) (f64.const 9.0) (local.get 0)) - ) - - ;; Recursion - - (func $fac-i64 (export "fac-i64") (type $over-i64) - (if (result i64) (i64.eqz (local.get 0)) - (then (i64.const 1)) - (else - (i64.mul - (local.get 0) - (call_indirect (type $over-i64) - (i64.sub (local.get 0) (i64.const 1)) - (i32.const 12) - ) - ) - ) - ) - ) - - (func $fib-i64 (export "fib-i64") (type $over-i64) - (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) - (then (i64.const 1)) - (else - (i64.add - (call_indirect (type $over-i64) - (i64.sub (local.get 0) (i64.const 2)) - (i32.const 13) - ) - (call_indirect (type $over-i64) - (i64.sub (local.get 0) (i64.const 1)) - (i32.const 13) - ) - ) - ) - ) - ) - - (func $fac-i32 (export "fac-i32") (type $over-i32) - (if (result i32) (i32.eqz (local.get 0)) - (then (i32.const 1)) - (else - (i32.mul - (local.get 0) - (call_indirect (type $over-i32) - (i32.sub (local.get 0) (i32.const 1)) - (i32.const 23) - ) - ) - ) - ) - ) - - (func $fac-f32 (export "fac-f32") (type $over-f32) - (if (result f32) (f32.eq (local.get 0) (f32.const 0.0)) - (then (f32.const 1.0)) - (else - (f32.mul - (local.get 0) - (call_indirect (type $over-f32) - (f32.sub (local.get 0) (f32.const 1.0)) - (i32.const 24) - ) - ) - ) - ) - ) - - (func $fac-f64 (export "fac-f64") (type $over-f64) - (if (result f64) (f64.eq (local.get 0) (f64.const 0.0)) - (then (f64.const 1.0)) - (else - (f64.mul - (local.get 0) - (call_indirect (type $over-f64) - (f64.sub (local.get 0) (f64.const 1.0)) - (i32.const 25) - ) - ) - ) - ) - ) - - (func $fib-i32 (export "fib-i32") (type $over-i32) - (if (result i32) (i32.le_u (local.get 0) (i32.const 1)) - (then (i32.const 1)) - (else - (i32.add - (call_indirect (type $over-i32) - (i32.sub (local.get 0) (i32.const 2)) - (i32.const 26) - ) - (call_indirect (type $over-i32) - (i32.sub (local.get 0) (i32.const 1)) - (i32.const 26) - ) - ) - ) - ) - ) - - (func $fib-f32 (export "fib-f32") (type $over-f32) - (if (result f32) (f32.le (local.get 0) (f32.const 1.0)) - (then (f32.const 1.0)) - (else - (f32.add - (call_indirect (type $over-f32) - (f32.sub (local.get 0) (f32.const 2.0)) - (i32.const 27) - ) - (call_indirect (type $over-f32) - (f32.sub (local.get 0) (f32.const 1.0)) - (i32.const 27) - ) - ) - ) - ) - ) - - (func $fib-f64 (export "fib-f64") (type $over-f64) - (if (result f64) (f64.le (local.get 0) (f64.const 1.0)) - (then (f64.const 1.0)) - (else - (f64.add - (call_indirect (type $over-f64) - (f64.sub (local.get 0) (f64.const 2.0)) - (i32.const 28) - ) - (call_indirect (type $over-f64) - (f64.sub (local.get 0) (f64.const 1.0)) - (i32.const 28) - ) - ) - ) - ) - ) - - (func $even (export "even") (param i32) (result i32) - (if (result i32) (i32.eqz (local.get 0)) - (then (i32.const 44)) - (else - (call_indirect (type $over-i32) - (i32.sub (local.get 0) (i32.const 1)) - (i32.const 15) - ) - ) - ) - ) - (func $odd (export "odd") (param i32) (result i32) - (if (result i32) (i32.eqz (local.get 0)) - (then (i32.const 99)) - (else - (call_indirect (type $over-i32) - (i32.sub (local.get 0) (i32.const 1)) - (i32.const 14) - ) - ) - ) - ) - - ;; Stack exhaustion - - ;; Implementations are required to have every call consume some abstract - ;; resource towards exhausting some abstract finite limit, such that - ;; infinitely recursive test cases reliably trap in finite time. This is - ;; because otherwise applications could come to depend on it on those - ;; implementations and be incompatible with implementations that don't do - ;; it (or don't do it under the same circumstances). - - (func $runaway (export "runaway") (call_indirect (type $proc) (i32.const 16))) - - (func $mutual-runaway1 (export "mutual-runaway") (call_indirect (type $proc) (i32.const 18))) - (func $mutual-runaway2 (call_indirect (type $proc) (i32.const 17))) - - ;; As parameter of control constructs and instructions - - (memory 1) - - (func (export "as-select-first") (result i32) - (select (call_indirect (type $out-i32) (i32.const 0)) (i32.const 2) (i32.const 3)) - ) - (func (export "as-select-mid") (result i32) - (select (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (i32.const 3)) - ) - (func (export "as-select-last") (result i32) - (select (i32.const 2) (i32.const 3) (call_indirect (type $out-i32) (i32.const 0))) - ) - - (func (export "as-if-condition") (result i32) - (if (result i32) (call_indirect (type $out-i32) (i32.const 0)) (then (i32.const 1)) (else (i32.const 2))) - ) - - (func (export "as-br_if-first") (result i64) - (block (result i64) (br_if 0 (call_indirect (type $out-i64) (i32.const 1)) (i32.const 2))) - ) - (func (export "as-br_if-last") (result i32) - (block (result i32) (br_if 0 (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)))) - ) - - (func (export "as-br_table-first") (result f32) - (block (result f32) (call_indirect (type $out-f32) (i32.const 2)) (i32.const 2) (br_table 0 0)) - ) - (func (export "as-br_table-last") (result i32) - (block (result i32) (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (br_table 0 0)) - ) - - (func (export "as-store-first") - (call_indirect (type $out-i32) (i32.const 0)) (i32.const 1) (i32.store) - ) - (func (export "as-store-last") - (i32.const 10) (call_indirect (type $out-f64) (i32.const 3)) (f64.store) - ) - - (func (export "as-memory.grow-value") (result i32) - (memory.grow (call_indirect (type $out-i32) (i32.const 0))) - ) - (func (export "as-return-value") (result i32) - (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (return) - ) - (func (export "as-drop-operand") - (call_indirect (type $over-i64) (i64.const 1) (i32.const 5)) (drop) - ) - (func (export "as-br-value") (result f32) - (block (result f32) (br 0 (call_indirect (type $over-f32) (f32.const 1) (i32.const 6)))) - ) - (func (export "as-local.set-value") (result f64) - (local f64) (local.set 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) (local.get 0) - ) - (func (export "as-local.tee-value") (result f64) - (local f64) (local.tee 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) - ) - (global $a (mut f64) (f64.const 10.0)) - (func (export "as-global.set-value") (result f64) - (global.set $a (call_indirect (type $over-f64) (f64.const 1.0) (i32.const 7))) - (global.get $a) - ) - - (func (export "as-load-operand") (result i32) - (i32.load (call_indirect (type $out-i32) (i32.const 0))) - ) - - (func (export "as-unary-operand") (result f32) - (block (result f32) - (f32.sqrt - (call_indirect (type $over-f32) (f32.const 0x0p+0) (i32.const 6)) - ) - ) - ) - - (func (export "as-binary-left") (result i32) - (block (result i32) - (i32.add - (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) - (i32.const 10) - ) - ) - ) - (func (export "as-binary-right") (result i32) - (block (result i32) - (i32.sub - (i32.const 10) - (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) - ) - ) - ) - - (func (export "as-test-operand") (result i32) - (block (result i32) - (i32.eqz - (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) - ) - ) - ) - - (func (export "as-compare-left") (result i32) - (block (result i32) - (i32.le_u - (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) - (i32.const 10) - ) - ) - ) - (func (export "as-compare-right") (result i32) - (block (result i32) - (i32.ne - (i32.const 10) - (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) - ) - ) - ) - - (func (export "as-convert-operand") (result i64) - (block (result i64) - (i64.extend_i32_s - (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) - ) - ) - ) - -) - -(assert_return (invoke "type-i32") (i32.const 0x132)) -(assert_return (invoke "type-i64") (i64.const 0x164)) -(assert_return (invoke "type-f32") (f32.const 0xf32)) -(assert_return (invoke "type-f64") (f64.const 0xf64)) - -(assert_return (invoke "type-index") (i64.const 100)) - -(assert_return (invoke "type-first-i32") (i32.const 32)) -(assert_return (invoke "type-first-i64") (i64.const 64)) -(assert_return (invoke "type-first-f32") (f32.const 1.32)) -(assert_return (invoke "type-first-f64") (f64.const 1.64)) - -(assert_return (invoke "type-second-i32") (i32.const 32)) -(assert_return (invoke "type-second-i64") (i64.const 64)) -(assert_return (invoke "type-second-f32") (f32.const 32)) -(assert_return (invoke "type-second-f64") (f64.const 64.1)) - -(assert_return (invoke "dispatch" (i32.const 5) (i64.const 2)) (i64.const 2)) -(assert_return (invoke "dispatch" (i32.const 5) (i64.const 5)) (i64.const 5)) -(assert_return (invoke "dispatch" (i32.const 12) (i64.const 5)) (i64.const 120)) -(assert_return (invoke "dispatch" (i32.const 13) (i64.const 5)) (i64.const 8)) -(assert_return (invoke "dispatch" (i32.const 20) (i64.const 2)) (i64.const 2)) -(assert_trap (invoke "dispatch" (i32.const 0) (i64.const 2)) "indirect call type mismatch") -(assert_trap (invoke "dispatch" (i32.const 15) (i64.const 2)) "indirect call type mismatch") -(assert_trap (invoke "dispatch" (i32.const 29) (i64.const 2)) "undefined element") -(assert_trap (invoke "dispatch" (i32.const -1) (i64.const 2)) "undefined element") -(assert_trap (invoke "dispatch" (i32.const 1213432423) (i64.const 2)) "undefined element") - -(assert_return (invoke "dispatch-structural-i64" (i32.const 5)) (i64.const 9)) -(assert_return (invoke "dispatch-structural-i64" (i32.const 12)) (i64.const 362880)) -(assert_return (invoke "dispatch-structural-i64" (i32.const 13)) (i64.const 55)) -(assert_return (invoke "dispatch-structural-i64" (i32.const 20)) (i64.const 9)) -(assert_trap (invoke "dispatch-structural-i64" (i32.const 11)) "indirect call type mismatch") -(assert_trap (invoke "dispatch-structural-i64" (i32.const 22)) "indirect call type mismatch") - -(assert_return (invoke "dispatch-structural-i32" (i32.const 4)) (i32.const 9)) -(assert_return (invoke "dispatch-structural-i32" (i32.const 23)) (i32.const 362880)) -(assert_return (invoke "dispatch-structural-i32" (i32.const 26)) (i32.const 55)) -(assert_return (invoke "dispatch-structural-i32" (i32.const 19)) (i32.const 9)) -(assert_trap (invoke "dispatch-structural-i32" (i32.const 9)) "indirect call type mismatch") -(assert_trap (invoke "dispatch-structural-i32" (i32.const 21)) "indirect call type mismatch") - -(assert_return (invoke "dispatch-structural-f32" (i32.const 6)) (f32.const 9.0)) -(assert_return (invoke "dispatch-structural-f32" (i32.const 24)) (f32.const 362880.0)) -(assert_return (invoke "dispatch-structural-f32" (i32.const 27)) (f32.const 55.0)) -(assert_return (invoke "dispatch-structural-f32" (i32.const 21)) (f32.const 9.0)) -(assert_trap (invoke "dispatch-structural-f32" (i32.const 8)) "indirect call type mismatch") -(assert_trap (invoke "dispatch-structural-f32" (i32.const 19)) "indirect call type mismatch") - -(assert_return (invoke "dispatch-structural-f64" (i32.const 7)) (f64.const 9.0)) -(assert_return (invoke "dispatch-structural-f64" (i32.const 25)) (f64.const 362880.0)) -(assert_return (invoke "dispatch-structural-f64" (i32.const 28)) (f64.const 55.0)) -(assert_return (invoke "dispatch-structural-f64" (i32.const 22)) (f64.const 9.0)) -(assert_trap (invoke "dispatch-structural-f64" (i32.const 10)) "indirect call type mismatch") -(assert_trap (invoke "dispatch-structural-f64" (i32.const 18)) "indirect call type mismatch") - -(assert_return (invoke "fac-i64" (i64.const 0)) (i64.const 1)) -(assert_return (invoke "fac-i64" (i64.const 1)) (i64.const 1)) -(assert_return (invoke "fac-i64" (i64.const 5)) (i64.const 120)) -(assert_return (invoke "fac-i64" (i64.const 25)) (i64.const 7034535277573963776)) - -(assert_return (invoke "fac-i32" (i32.const 0)) (i32.const 1)) -(assert_return (invoke "fac-i32" (i32.const 1)) (i32.const 1)) -(assert_return (invoke "fac-i32" (i32.const 5)) (i32.const 120)) -(assert_return (invoke "fac-i32" (i32.const 10)) (i32.const 3628800)) - -(assert_return (invoke "fac-f32" (f32.const 0.0)) (f32.const 1.0)) -(assert_return (invoke "fac-f32" (f32.const 1.0)) (f32.const 1.0)) -(assert_return (invoke "fac-f32" (f32.const 5.0)) (f32.const 120.0)) -(assert_return (invoke "fac-f32" (f32.const 10.0)) (f32.const 3628800.0)) - -(assert_return (invoke "fac-f64" (f64.const 0.0)) (f64.const 1.0)) -(assert_return (invoke "fac-f64" (f64.const 1.0)) (f64.const 1.0)) -(assert_return (invoke "fac-f64" (f64.const 5.0)) (f64.const 120.0)) -(assert_return (invoke "fac-f64" (f64.const 10.0)) (f64.const 3628800.0)) - -(assert_return (invoke "fib-i64" (i64.const 0)) (i64.const 1)) -(assert_return (invoke "fib-i64" (i64.const 1)) (i64.const 1)) -(assert_return (invoke "fib-i64" (i64.const 2)) (i64.const 2)) -(assert_return (invoke "fib-i64" (i64.const 5)) (i64.const 8)) -(assert_return (invoke "fib-i64" (i64.const 20)) (i64.const 10946)) - -(assert_return (invoke "fib-i32" (i32.const 0)) (i32.const 1)) -(assert_return (invoke "fib-i32" (i32.const 1)) (i32.const 1)) -(assert_return (invoke "fib-i32" (i32.const 2)) (i32.const 2)) -(assert_return (invoke "fib-i32" (i32.const 5)) (i32.const 8)) -(assert_return (invoke "fib-i32" (i32.const 20)) (i32.const 10946)) - -(assert_return (invoke "fib-f32" (f32.const 0.0)) (f32.const 1.0)) -(assert_return (invoke "fib-f32" (f32.const 1.0)) (f32.const 1.0)) -(assert_return (invoke "fib-f32" (f32.const 2.0)) (f32.const 2.0)) -(assert_return (invoke "fib-f32" (f32.const 5.0)) (f32.const 8.0)) -(assert_return (invoke "fib-f32" (f32.const 20.0)) (f32.const 10946.0)) - -(assert_return (invoke "fib-f64" (f64.const 0.0)) (f64.const 1.0)) -(assert_return (invoke "fib-f64" (f64.const 1.0)) (f64.const 1.0)) -(assert_return (invoke "fib-f64" (f64.const 2.0)) (f64.const 2.0)) -(assert_return (invoke "fib-f64" (f64.const 5.0)) (f64.const 8.0)) -(assert_return (invoke "fib-f64" (f64.const 20.0)) (f64.const 10946.0)) - -(assert_return (invoke "even" (i32.const 0)) (i32.const 44)) -(assert_return (invoke "even" (i32.const 1)) (i32.const 99)) -(assert_return (invoke "even" (i32.const 100)) (i32.const 44)) -(assert_return (invoke "even" (i32.const 77)) (i32.const 99)) -(assert_return (invoke "odd" (i32.const 0)) (i32.const 99)) -(assert_return (invoke "odd" (i32.const 1)) (i32.const 44)) -(assert_return (invoke "odd" (i32.const 200)) (i32.const 99)) -(assert_return (invoke "odd" (i32.const 77)) (i32.const 44)) - -(assert_exhaustion (invoke "runaway") "call stack exhausted") -(assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") - -(assert_return (invoke "as-select-first") (i32.const 0x132)) -(assert_return (invoke "as-select-mid") (i32.const 2)) -(assert_return (invoke "as-select-last") (i32.const 2)) - -(assert_return (invoke "as-if-condition") (i32.const 1)) - -(assert_return (invoke "as-br_if-first") (i64.const 0x164)) -(assert_return (invoke "as-br_if-last") (i32.const 2)) - -(assert_return (invoke "as-br_table-first") (f32.const 0xf32)) -(assert_return (invoke "as-br_table-last") (i32.const 2)) - -(assert_return (invoke "as-store-first")) -(assert_return (invoke "as-store-last")) - -(assert_return (invoke "as-memory.grow-value") (i32.const 1)) -(assert_return (invoke "as-return-value") (i32.const 1)) -(assert_return (invoke "as-drop-operand")) -(assert_return (invoke "as-br-value") (f32.const 1)) -(assert_return (invoke "as-local.set-value") (f64.const 1)) -(assert_return (invoke "as-local.tee-value") (f64.const 1)) -(assert_return (invoke "as-global.set-value") (f64.const 1.0)) -(assert_return (invoke "as-load-operand") (i32.const 1)) - -(assert_return (invoke "as-unary-operand") (f32.const 0x0p+0)) -(assert_return (invoke "as-binary-left") (i32.const 11)) -(assert_return (invoke "as-binary-right") (i32.const 9)) -(assert_return (invoke "as-test-operand") (i32.const 0)) -(assert_return (invoke "as-compare-left") (i32.const 1)) -(assert_return (invoke "as-compare-right") (i32.const 1)) -(assert_return (invoke "as-convert-operand") (i64.const 1)) - -;; Invalid syntax - -(assert_malformed - (module quote - "(type $sig (func (param i32) (result i32)))" - "(table 0 funcref)" - "(func (result i32)" - " (call_indirect (type $sig) (result i32) (param i32)" - " (i32.const 0) (i32.const 0)" - " )" - ")" - ) - "unexpected token" -) -(assert_malformed - (module quote - "(type $sig (func (param i32) (result i32)))" - "(table 0 funcref)" - "(func (result i32)" - " (call_indirect (param i32) (type $sig) (result i32)" - " (i32.const 0) (i32.const 0)" - " )" - ")" - ) - "unexpected token" -) -(assert_malformed - (module quote - "(type $sig (func (param i32) (result i32)))" - "(table 0 funcref)" - "(func (result i32)" - " (call_indirect (param i32) (result i32) (type $sig)" - " (i32.const 0) (i32.const 0)" - " )" - ")" - ) - "unexpected token" -) -(assert_malformed - (module quote - "(type $sig (func (param i32) (result i32)))" - "(table 0 funcref)" - "(func (result i32)" - " (call_indirect (result i32) (type $sig) (param i32)" - " (i32.const 0) (i32.const 0)" - " )" - ")" - ) - "unexpected token" -) -(assert_malformed - (module quote - "(type $sig (func (param i32) (result i32)))" - "(table 0 funcref)" - "(func (result i32)" - " (call_indirect (result i32) (param i32) (type $sig)" - " (i32.const 0) (i32.const 0)" - " )" - ")" - ) - "unexpected token" -) -(assert_malformed - (module quote - "(table 0 funcref)" - "(func (result i32)" - " (call_indirect (result i32) (param i32) (i32.const 0) (i32.const 0))" - ")" - ) - "unexpected token" -) - -(assert_malformed - (module quote - "(table 0 funcref)" - "(func (call_indirect (param $x i32) (i32.const 0) (i32.const 0)))" - ) - "unexpected token" -) -(assert_malformed - (module quote - "(type $sig (func))" - "(table 0 funcref)" - "(func (result i32)" - " (call_indirect (type $sig) (result i32) (i32.const 0))" - ")" - ) - "inline function type" -) -(assert_malformed - (module quote - "(type $sig (func (param i32) (result i32)))" - "(table 0 funcref)" - "(func (result i32)" - " (call_indirect (type $sig) (result i32) (i32.const 0))" - ")" - ) - "inline function type" -) -(assert_malformed - (module quote - "(type $sig (func (param i32) (result i32)))" - "(table 0 funcref)" - "(func" - " (call_indirect (type $sig) (param i32) (i32.const 0) (i32.const 0))" - ")" - ) - "inline function type" -) -(assert_malformed - (module quote - "(type $sig (func (param i32 i32) (result i32)))" - "(table 0 funcref)" - "(func (result i32)" - " (call_indirect (type $sig) (param i32) (result i32)" - " (i32.const 0) (i32.const 0)" - " )" - ")" - ) - "inline function type" -) - -;; Invalid typing - -(assert_invalid - (module - (type (func)) - (func $no-table (call_indirect (type 0) (i32.const 0))) - ) - "unknown table" -) - -(assert_invalid - (module - (type (func)) - (table 0 funcref) - (func $type-void-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) - ) - "type mismatch" -) -(assert_invalid - (module - (type (func (result i64))) - (table 0 funcref) - (func $type-num-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) - ) - "type mismatch" -) - -(assert_invalid - (module - (type (func (param i32))) - (table 0 funcref) - (func $arity-0-vs-1 (call_indirect (type 0) (i32.const 0))) - ) - "type mismatch" -) -(assert_invalid - (module - (type (func (param f64 i32))) - (table 0 funcref) - (func $arity-0-vs-2 (call_indirect (type 0) (i32.const 0))) - ) - "type mismatch" -) -(assert_invalid - (module - (type (func)) - (table 0 funcref) - (func $arity-1-vs-0 (call_indirect (type 0) (i32.const 1) (i32.const 0))) - ) - "type mismatch" -) -(assert_invalid - (module - (type (func)) - (table 0 funcref) - (func $arity-2-vs-0 - (call_indirect (type 0) (f64.const 2) (i32.const 1) (i32.const 0)) - ) - ) - "type mismatch" -) - -(assert_invalid - (module - (type (func (param i32))) - (table 0 funcref) - (func $type-func-void-vs-i32 (call_indirect (type 0) (i32.const 1) (nop))) - ) - "type mismatch" -) -(assert_invalid - (module - (type (func (param i32))) - (table 0 funcref) - (func $type-func-num-vs-i32 (call_indirect (type 0) (i32.const 0) (i64.const 1))) - ) - "type mismatch" -) - -(assert_invalid - (module - (type (func (param i32 i32))) - (table 0 funcref) - (func $type-first-void-vs-num - (call_indirect (type 0) (nop) (i32.const 1) (i32.const 0)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (type (func (param i32 i32))) - (table 0 funcref) - (func $type-second-void-vs-num - (call_indirect (type 0) (i32.const 1) (nop) (i32.const 0)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (type (func (param i32 f64))) - (table 0 funcref) - (func $type-first-num-vs-num - (call_indirect (type 0) (f64.const 1) (i32.const 1) (i32.const 0)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (type (func (param f64 i32))) - (table 0 funcref) - (func $type-second-num-vs-num - (call_indirect (type 0) (i32.const 1) (f64.const 1) (i32.const 0)) - ) - ) - "type mismatch" -) - -(assert_invalid - (module - (func $f (param i32)) - (type $sig (func (param i32))) - (table funcref (elem $f)) - (func $type-first-empty-in-block - (block - (call_indirect (type $sig) (i32.const 0)) - ) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func $f (param i32 i32)) - (type $sig (func (param i32 i32))) - (table funcref (elem $f)) - (func $type-second-empty-in-block - (block - (call_indirect (type $sig) (i32.const 0) (i32.const 0)) - ) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func $f (param i32)) - (type $sig (func (param i32))) - (table funcref (elem $f)) - (func $type-first-empty-in-loop - (loop - (call_indirect (type $sig) (i32.const 0)) - ) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func $f (param i32 i32)) - (type $sig (func (param i32 i32))) - (table funcref (elem $f)) - (func $type-second-empty-in-loop - (loop - (call_indirect (type $sig) (i32.const 0) (i32.const 0)) - ) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func $f (param i32)) - (type $sig (func (param i32))) - (table funcref (elem $f)) - (func $type-first-empty-in-then - (i32.const 0) (i32.const 0) - (if - (then - (call_indirect (type $sig) (i32.const 0)) - ) - ) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func $f (param i32 i32)) - (type $sig (func (param i32 i32))) - (table funcref (elem $f)) - (func $type-second-empty-in-then - (i32.const 0) (i32.const 0) - (if - (then - (call_indirect (type $sig) (i32.const 0) (i32.const 0)) - ) - ) - ) - ) - "type mismatch" -) - - -;; Unbound type - -(assert_invalid - (module - (table 0 funcref) - (func $unbound-type (call_indirect (type 1) (i32.const 0))) - ) - "unknown type" -) -(assert_invalid - (module - (table 0 funcref) - (func $large-type (call_indirect (type 1012321300) (i32.const 0))) - ) - "unknown type" -) - - -;; Unbound function in table - -(assert_invalid - (module (table funcref (elem 0 0))) - "unknown function" -) diff --git a/test/spec/fac.wast b/test/spec/fac.wast deleted file mode 100644 index ef10991a82c..00000000000 --- a/test/spec/fac.wast +++ /dev/null @@ -1,89 +0,0 @@ -(module - ;; Recursive factorial - (func (export "fac-rec") (param i64) (result i64) - (if (result i64) (i64.eq (local.get 0) (i64.const 0)) - (then (i64.const 1)) - (else - (i64.mul (local.get 0) (call 0 (i64.sub (local.get 0) (i64.const 1)))) - ) - ) - ) - - ;; Recursive factorial named - (func $fac-rec-named (export "fac-rec-named") (param $n i64) (result i64) - (if (result i64) (i64.eq (local.get $n) (i64.const 0)) - (then (i64.const 1)) - (else - (i64.mul - (local.get $n) - (call $fac-rec-named (i64.sub (local.get $n) (i64.const 1))) - ) - ) - ) - ) - - ;; Iterative factorial - (func (export "fac-iter") (param i64) (result i64) - (local i64 i64) - (local.set 1 (local.get 0)) - (local.set 2 (i64.const 1)) - (block - (loop - (if - (i64.eq (local.get 1) (i64.const 0)) - (then (br 2)) - (else - (local.set 2 (i64.mul (local.get 1) (local.get 2))) - (local.set 1 (i64.sub (local.get 1) (i64.const 1))) - ) - ) - (br 0) - ) - ) - (local.get 2) - ) - - ;; Iterative factorial named - (func (export "fac-iter-named") (param $n i64) (result i64) - (local $i i64) - (local $res i64) - (local.set $i (local.get $n)) - (local.set $res (i64.const 1)) - (block $done - (loop $loop - (if - (i64.eq (local.get $i) (i64.const 0)) - (then (br $done)) - (else - (local.set $res (i64.mul (local.get $i) (local.get $res))) - (local.set $i (i64.sub (local.get $i) (i64.const 1))) - ) - ) - (br $loop) - ) - ) - (local.get $res) - ) - - ;; Optimized factorial. - (func (export "fac-opt") (param i64) (result i64) - (local i64) - (local.set 1 (i64.const 1)) - (block - (br_if 0 (i64.lt_s (local.get 0) (i64.const 2))) - (loop - (local.set 1 (i64.mul (local.get 1) (local.get 0))) - (local.set 0 (i64.add (local.get 0) (i64.const -1))) - (br_if 0 (i64.gt_s (local.get 0) (i64.const 1))) - ) - ) - (local.get 1) - ) -) - -(assert_return (invoke "fac-rec" (i64.const 25)) (i64.const 7034535277573963776)) -(assert_return (invoke "fac-iter" (i64.const 25)) (i64.const 7034535277573963776)) -(assert_return (invoke "fac-rec-named" (i64.const 25)) (i64.const 7034535277573963776)) -(assert_return (invoke "fac-iter-named" (i64.const 25)) (i64.const 7034535277573963776)) -(assert_return (invoke "fac-opt" (i64.const 25)) (i64.const 7034535277573963776)) -(assert_exhaustion (invoke "fac-rec" (i64.const 1073741824)) "call stack exhausted") diff --git a/test/spec/i31.wast b/test/spec/i31.wast deleted file mode 100644 index 6138ca4fada..00000000000 --- a/test/spec/i31.wast +++ /dev/null @@ -1,30 +0,0 @@ -(module - (func (export "new") (param $i i32) (result (ref i31)) - (ref.i31 (local.get $i)) - ) - - (func (export "get_u") (param $i i32) (result i32) - (i31.get_u (ref.i31 (local.get $i))) - ) - (func (export "get_s") (param $i i32) (result i32) - (i31.get_s (ref.i31 (local.get $i))) - ) -) - -(assert_return (invoke "get_u" (i32.const 0)) (i32.const 0)) -(assert_return (invoke "get_u" (i32.const 100)) (i32.const 100)) -(assert_return (invoke "get_u" (i32.const -1)) (i32.const 0x7fffffff)) -(assert_return (invoke "get_u" (i32.const 0x3fffffff)) (i32.const 0x3fffffff)) -(assert_return (invoke "get_u" (i32.const 0x40000000)) (i32.const 0x40000000)) -(assert_return (invoke "get_u" (i32.const 0x7fffffff)) (i32.const 0x7fffffff)) -(assert_return (invoke "get_u" (i32.const 0xaaaaaaaa)) (i32.const 0x2aaaaaaa)) -(assert_return (invoke "get_u" (i32.const 0xcaaaaaaa)) (i32.const 0x4aaaaaaa)) - -(assert_return (invoke "get_s" (i32.const 0)) (i32.const 0)) -(assert_return (invoke "get_s" (i32.const 100)) (i32.const 100)) -(assert_return (invoke "get_s" (i32.const -1)) (i32.const -1)) -(assert_return (invoke "get_s" (i32.const 0x3fffffff)) (i32.const 0x3fffffff)) -(assert_return (invoke "get_s" (i32.const 0x40000000)) (i32.const -0x40000000)) -(assert_return (invoke "get_s" (i32.const 0x7fffffff)) (i32.const -1)) -(assert_return (invoke "get_s" (i32.const 0xaaaaaaaa)) (i32.const 0x2aaaaaaa)) -(assert_return (invoke "get_s" (i32.const 0xcaaaaaaa)) (i32.const 0xcaaaaaaa)) diff --git a/test/spec/instance.wast b/test/spec/instance.wast deleted file mode 100644 index 87693221687..00000000000 --- a/test/spec/instance.wast +++ /dev/null @@ -1,148 +0,0 @@ -;; Copy of test/spec/testsuite/instance.wast -;; TODO: Use the upstream test after adding support for default values for tables. - -;; Instantiation is generative - -(module definition $M - (global (export "glob") (mut i32) (i32.const 0)) - (memory (export "mem") 1) - (tag (export "tag")) -) - -(module instance $I1 $M) -(module instance $I2 $M) -(register "I1" $I1) -(register "I2" $I2) - -(module - (import "I1" "glob" (global $glob1 (mut i32))) - (import "I2" "glob" (global $glob2 (mut i32))) - (import "I1" "mem" (memory $mem1 1)) - (import "I2" "mem" (memory $mem2 1)) - (import "I1" "tag" (tag $tag1)) - (import "I2" "tag" (tag $tag2)) - - (func $f) - (elem declare func $f) - - (func (export "glob") (result i32) - (global.set $glob1 (i32.const 1)) - (global.get $glob2) - ) - (func (export "mem") (result i32) - (i32.store $mem1 (i32.const 0) (i32.const 1)) - (i32.load $mem2 (i32.const 0)) - ) - (func (export "tag") (result i32) - (block $on_tag1 - (block $on_other - (try_table (catch $tag1 $on_tag1) (catch_all $on_other) - (throw $tag2) - ) - (unreachable) - ) - (return (i32.const 0)) - ) - (return (i32.const 1)) - ) -) - -(assert_return (invoke "glob") (i32.const 0)) -(assert_return (invoke "mem") (i32.const 0)) -(assert_return (invoke "tag") (i32.const 0)) - - -;; Import is not generative - -(module - (import "I1" "glob" (global $glob1 (mut i32))) - (import "I1" "glob" (global $glob2 (mut i32))) - (import "I1" "mem" (memory $mem1 1)) - (import "I1" "mem" (memory $mem2 1)) - (import "I1" "tag" (tag $tag1)) - (import "I1" "tag" (tag $tag2)) - - (func $f) - (elem declare func $f) - - (func (export "glob") (result i32) - (global.set $glob1 (i32.const 1)) - (global.get $glob2) - ) - (func (export "mem") (result i32) - (i32.store $mem1 (i32.const 0) (i32.const 1)) - (i32.load $mem2 (i32.const 0)) - ) - (func (export "tag") (result i32) - (block $on_tag1 - (block $on_other - (try_table (catch $tag1 $on_tag1) (catch_all $on_other) - (throw $tag2) - ) - (unreachable) - ) - (return (i32.const 0)) - ) - (return (i32.const 1)) - ) -) - -(assert_return (invoke "glob") (i32.const 1)) -(assert_return (invoke "mem") (i32.const 1)) -(assert_return (invoke "tag") (i32.const 1)) - - -;; Export is not generative - -(module definition $N - (global $glob (mut i32) (i32.const 0)) - (memory $mem 1) - (tag $tag) - - (export "glob1" (global $glob)) - (export "glob2" (global $glob)) - (export "mem1" (memory $mem)) - (export "mem2" (memory $mem)) - (export "tag1" (tag $tag)) - (export "tag2" (tag $tag)) -) - -(module instance $I $N) -(register "I" $I) - -(module - (import "I" "glob1" (global $glob1 (mut i32))) - (import "I" "glob2" (global $glob2 (mut i32))) - (import "I" "mem1" (memory $mem1 1)) - (import "I" "mem2" (memory $mem2 1)) - (import "I" "tag1" (tag $tag1)) - (import "I" "tag2" (tag $tag2)) - - (func $f) - (elem declare func $f) - - (func (export "glob") (result i32) - (global.set $glob1 (i32.const 1)) - (global.get $glob2) - ) - (func (export "mem") (result i32) - (i32.store $mem1 (i32.const 0) (i32.const 1)) - (i32.load $mem2 (i32.const 0)) - ) - (func (export "tag") (result i32) - (block $on_tag1 - (block $on_other - (try_table (catch $tag1 $on_tag1) (catch_all $on_other) - (throw $tag2) - ) - (unreachable) - ) - (return (i32.const 0)) - ) - (return (i32.const 1)) - ) -) - -(assert_return (invoke "glob") (i32.const 1)) -(assert_return (invoke "mem") (i32.const 1)) -(assert_return (invoke "tag") (i32.const 1)) diff --git a/test/spec/linking0.wast b/test/spec/linking0.wast deleted file mode 100644 index 38472125e60..00000000000 --- a/test/spec/linking0.wast +++ /dev/null @@ -1,31 +0,0 @@ -;; Adapted from test/spec/testsuite/linking0.wast with a failing assertion removed. -;; TODO: Remove this once test/spec/testsuite/linking0.wast passes. - -(module $Mt - (type (func (result i32))) - (type (func)) - - (table (export "tab") 10 funcref) - (elem (i32.const 2) $g $g $g $g) - (func $g (result i32) (i32.const 4)) - (func (export "h") (result i32) (i32.const -4)) - - (func (export "call") (param i32) (result i32) - (call_indirect (type 0) (local.get 0)) - ) -) -(register "Mt" $Mt) - -(assert_trap - (module - (table (import "Mt" "tab") 10 funcref) - (func $f (result i32) (i32.const 0)) - (elem (i32.const 7) $f) - (memory 0) - (memory $m 1) - (memory 0) - (data $m (i32.const 0x10000) "d") ;; out of bounds - ) - "out of bounds memory access" -) -(assert_return (invoke $Mt "call" (i32.const 7)) (i32.const 0)) diff --git a/test/spec/loop.wast b/test/spec/loop.wast deleted file mode 100644 index 9141d00ed0c..00000000000 --- a/test/spec/loop.wast +++ /dev/null @@ -1,469 +0,0 @@ -;; Test `loop` opcode - -(module - (memory 1) - - (func $dummy) - - (func (export "empty") - (loop) - (loop $l) - ) - - (func (export "singular") (result i32) - (loop (nop)) - (loop (result i32) (i32.const 7)) - ) - - (func (export "multi") (result i32) - (loop (call $dummy) (call $dummy) (call $dummy) (call $dummy)) - (loop (result i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 8)) - ) - - (func (export "nested") (result i32) - (loop (result i32) - (loop (call $dummy) (block) (nop)) - (loop (result i32) (call $dummy) (i32.const 9)) - ) - ) - - (func (export "deep") (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (loop (result i32) (block (result i32) - (call $dummy) (i32.const 150) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - )) - ) - - (func (export "as-select-first") (result i32) - (select (loop (result i32) (i32.const 1)) (i32.const 2) (i32.const 3)) - ) - (func (export "as-select-mid") (result i32) - (select (i32.const 2) (loop (result i32) (i32.const 1)) (i32.const 3)) - ) - (func (export "as-select-last") (result i32) - (select (i32.const 2) (i32.const 3) (loop (result i32) (i32.const 1))) - ) - - (func (export "as-if-condition") - (loop (result i32) (i32.const 1)) (if (then (call $dummy))) - ) - (func (export "as-if-then") (result i32) - (if (result i32) (i32.const 1) (then (loop (result i32) (i32.const 1))) (else (i32.const 2))) - ) - (func (export "as-if-else") (result i32) - (if (result i32) (i32.const 1) (then (i32.const 2)) (else (loop (result i32) (i32.const 1)))) - ) - - (func (export "as-br_if-first") (result i32) - (block (result i32) (br_if 0 (loop (result i32) (i32.const 1)) (i32.const 2))) - ) - (func (export "as-br_if-last") (result i32) - (block (result i32) (br_if 0 (i32.const 2) (loop (result i32) (i32.const 1)))) - ) - - (func (export "as-br_table-first") (result i32) - (block (result i32) (loop (result i32) (i32.const 1)) (i32.const 2) (br_table 0 0)) - ) - (func (export "as-br_table-last") (result i32) - (block (result i32) (i32.const 2) (loop (result i32) (i32.const 1)) (br_table 0 0)) - ) - - (func $func (param i32 i32) (result i32) (local.get 0)) - (type $check (func (param i32 i32) (result i32))) - (table funcref (elem $func)) - (func (export "as-call_indirect-first") (result i32) - (block (result i32) - (call_indirect (type $check) - (loop (result i32) (i32.const 1)) (i32.const 2) (i32.const 0) - ) - ) - ) - (func (export "as-call_indirect-mid") (result i32) - (block (result i32) - (call_indirect (type $check) - (i32.const 2) (loop (result i32) (i32.const 1)) (i32.const 0) - ) - ) - ) - (func (export "as-call_indirect-last") (result i32) - (block (result i32) - (call_indirect (type $check) - (i32.const 1) (i32.const 2) (loop (result i32) (i32.const 0)) - ) - ) - ) - - (func (export "as-store-first") - (loop (result i32) (i32.const 1)) (i32.const 1) (i32.store) - ) - (func (export "as-store-last") - (i32.const 10) (loop (result i32) (i32.const 1)) (i32.store) - ) - - (func (export "as-memory.grow-value") (result i32) - (memory.grow (loop (result i32) (i32.const 1))) - ) - - (func $f (param i32) (result i32) (local.get 0)) - - (func (export "as-call-value") (result i32) - (call $f (loop (result i32) (i32.const 1))) - ) - (func (export "as-return-value") (result i32) - (loop (result i32) (i32.const 1)) (return) - ) - (func (export "as-drop-operand") - (drop (loop (result i32) (i32.const 1))) - ) - (func (export "as-br-value") (result i32) - (block (result i32) (br 0 (loop (result i32) (i32.const 1)))) - ) - (func (export "as-local.set-value") (result i32) - (local i32) (local.set 0 (loop (result i32) (i32.const 1))) (local.get 0) - ) - (func (export "as-local.tee-value") (result i32) - (local i32) (local.tee 0 (loop (result i32) (i32.const 1))) - ) - (global $a (mut i32) (i32.const 0)) - (func (export "as-global.set-value") (result i32) - (global.set $a (loop (result i32) (i32.const 1))) - (global.get $a) - ) - (func (export "as-load-operand") (result i32) - (i32.load (loop (result i32) (i32.const 1))) - ) - - (func (export "as-unary-operand") (result i32) - (i32.ctz (loop (result i32) (call $dummy) (i32.const 13))) - ) - (func (export "as-binary-operand") (result i32) - (i32.mul - (loop (result i32) (call $dummy) (i32.const 3)) - (loop (result i32) (call $dummy) (i32.const 4)) - ) - ) - (func (export "as-test-operand") (result i32) - (i32.eqz (loop (result i32) (call $dummy) (i32.const 13))) - ) - (func (export "as-compare-operand") (result i32) - (f32.gt - (loop (result f32) (call $dummy) (f32.const 3)) - (loop (result f32) (call $dummy) (f32.const 3)) - ) - ) - - (func (export "break-bare") (result i32) - (block (loop (br 1) (br 0) (unreachable))) - (block (loop (br_if 1 (i32.const 1)) (unreachable))) - (block (loop (br_table 1 (i32.const 0)) (unreachable))) - (block (loop (br_table 1 1 1 (i32.const 1)) (unreachable))) - (i32.const 19) - ) - (func (export "break-value") (result i32) - (block (result i32) - (loop (result i32) (br 1 (i32.const 18)) (br 0) (i32.const 19)) - ) - ) - (func (export "break-repeated") (result i32) - (block (result i32) - (loop (result i32) - (br 1 (i32.const 18)) - (br 1 (i32.const 19)) - (drop (br_if 1 (i32.const 20) (i32.const 0))) - (drop (br_if 1 (i32.const 20) (i32.const 1))) - (br 1 (i32.const 21)) - (br_table 1 (i32.const 22) (i32.const 0)) - (br_table 1 1 1 (i32.const 23) (i32.const 1)) - (i32.const 21) - ) - ) - ) - (func (export "break-inner") (result i32) - (local i32) - (local.set 0 (i32.const 0)) - (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (block (result i32) (br 2 (i32.const 0x1))))))) - (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (loop (result i32) (br 2 (i32.const 0x2))))))) - (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (block (result i32) (loop (result i32) (br 1 (i32.const 0x4)))))))) - (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (i32.ctz (br 1 (i32.const 0x8))))))) - (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (i32.ctz (loop (result i32) (br 2 (i32.const 0x10)))))))) - (local.get 0) - ) - (func (export "cont-inner") (result i32) - (local i32) - (local.set 0 (i32.const 0)) - (local.set 0 (i32.add (local.get 0) (loop (result i32) (loop (result i32) (br 1))))) - (local.set 0 (i32.add (local.get 0) (loop (result i32) (i32.ctz (br 0))))) - (local.set 0 (i32.add (local.get 0) (loop (result i32) (i32.ctz (loop (result i32) (br 1)))))) - (local.get 0) - ) - - (func $fx (export "effects") (result i32) - (local i32) - (block - (loop - (local.set 0 (i32.const 1)) - (local.set 0 (i32.mul (local.get 0) (i32.const 3))) - (local.set 0 (i32.sub (local.get 0) (i32.const 5))) - (local.set 0 (i32.mul (local.get 0) (i32.const 7))) - (br 1) - (local.set 0 (i32.mul (local.get 0) (i32.const 100))) - ) - ) - (i32.eq (local.get 0) (i32.const -14)) - ) - - (func (export "while") (param i64) (result i64) - (local i64) - (local.set 1 (i64.const 1)) - (block - (loop - (br_if 1 (i64.eqz (local.get 0))) - (local.set 1 (i64.mul (local.get 0) (local.get 1))) - (local.set 0 (i64.sub (local.get 0) (i64.const 1))) - (br 0) - ) - ) - (local.get 1) - ) - - (func (export "for") (param i64) (result i64) - (local i64 i64) - (local.set 1 (i64.const 1)) - (local.set 2 (i64.const 2)) - (block - (loop - (br_if 1 (i64.gt_u (local.get 2) (local.get 0))) - (local.set 1 (i64.mul (local.get 1) (local.get 2))) - (local.set 2 (i64.add (local.get 2) (i64.const 1))) - (br 0) - ) - ) - (local.get 1) - ) - - (func (export "nesting") (param f32 f32) (result f32) - (local f32 f32) - (block - (loop - (br_if 1 (f32.eq (local.get 0) (f32.const 0))) - (local.set 2 (local.get 1)) - (block - (loop - (br_if 1 (f32.eq (local.get 2) (f32.const 0))) - (br_if 3 (f32.lt (local.get 2) (f32.const 0))) - (local.set 3 (f32.add (local.get 3) (local.get 2))) - (local.set 2 (f32.sub (local.get 2) (f32.const 2))) - (br 0) - ) - ) - (local.set 3 (f32.div (local.get 3) (local.get 0))) - (local.set 0 (f32.sub (local.get 0) (f32.const 1))) - (br 0) - ) - ) - (local.get 3) - ) -) - -(assert_return (invoke "empty")) -(assert_return (invoke "singular") (i32.const 7)) -(assert_return (invoke "multi") (i32.const 8)) -(assert_return (invoke "nested") (i32.const 9)) -(assert_return (invoke "deep") (i32.const 150)) - -(assert_return (invoke "as-select-first") (i32.const 1)) -(assert_return (invoke "as-select-mid") (i32.const 2)) -(assert_return (invoke "as-select-last") (i32.const 2)) - -(assert_return (invoke "as-if-condition")) -(assert_return (invoke "as-if-then") (i32.const 1)) -(assert_return (invoke "as-if-else") (i32.const 2)) - -(assert_return (invoke "as-br_if-first") (i32.const 1)) -(assert_return (invoke "as-br_if-last") (i32.const 2)) - -(assert_return (invoke "as-br_table-first") (i32.const 1)) -(assert_return (invoke "as-br_table-last") (i32.const 2)) - -(assert_return (invoke "as-call_indirect-first") (i32.const 1)) -(assert_return (invoke "as-call_indirect-mid") (i32.const 2)) -(assert_return (invoke "as-call_indirect-last") (i32.const 1)) - -(assert_return (invoke "as-store-first")) -(assert_return (invoke "as-store-last")) - -(assert_return (invoke "as-memory.grow-value") (i32.const 1)) -(assert_return (invoke "as-call-value") (i32.const 1)) -(assert_return (invoke "as-return-value") (i32.const 1)) -(assert_return (invoke "as-drop-operand")) -(assert_return (invoke "as-br-value") (i32.const 1)) -(assert_return (invoke "as-local.set-value") (i32.const 1)) -(assert_return (invoke "as-local.tee-value") (i32.const 1)) -(assert_return (invoke "as-global.set-value") (i32.const 1)) -(assert_return (invoke "as-load-operand") (i32.const 1)) - -(assert_return (invoke "as-unary-operand") (i32.const 0)) -(assert_return (invoke "as-binary-operand") (i32.const 12)) -(assert_return (invoke "as-test-operand") (i32.const 0)) -(assert_return (invoke "as-compare-operand") (i32.const 0)) - -(assert_return (invoke "break-bare") (i32.const 19)) -(assert_return (invoke "break-value") (i32.const 18)) -(assert_return (invoke "break-repeated") (i32.const 18)) -(assert_return (invoke "break-inner") (i32.const 0x1f)) - -(assert_return (invoke "effects") (i32.const 1)) - -(assert_return (invoke "while" (i64.const 0)) (i64.const 1)) -(assert_return (invoke "while" (i64.const 1)) (i64.const 1)) -(assert_return (invoke "while" (i64.const 2)) (i64.const 2)) -(assert_return (invoke "while" (i64.const 3)) (i64.const 6)) -(assert_return (invoke "while" (i64.const 5)) (i64.const 120)) -(assert_return (invoke "while" (i64.const 20)) (i64.const 2432902008176640000)) - -(assert_return (invoke "for" (i64.const 0)) (i64.const 1)) -(assert_return (invoke "for" (i64.const 1)) (i64.const 1)) -(assert_return (invoke "for" (i64.const 2)) (i64.const 2)) -(assert_return (invoke "for" (i64.const 3)) (i64.const 6)) -(assert_return (invoke "for" (i64.const 5)) (i64.const 120)) -(assert_return (invoke "for" (i64.const 20)) (i64.const 2432902008176640000)) - -(assert_return (invoke "nesting" (f32.const 0) (f32.const 7)) (f32.const 0)) -(assert_return (invoke "nesting" (f32.const 7) (f32.const 0)) (f32.const 0)) -(assert_return (invoke "nesting" (f32.const 1) (f32.const 1)) (f32.const 1)) -(assert_return (invoke "nesting" (f32.const 1) (f32.const 2)) (f32.const 2)) -(assert_return (invoke "nesting" (f32.const 1) (f32.const 3)) (f32.const 4)) -(assert_return (invoke "nesting" (f32.const 1) (f32.const 4)) (f32.const 6)) -(assert_return (invoke "nesting" (f32.const 1) (f32.const 100)) (f32.const 2550)) -(assert_return (invoke "nesting" (f32.const 1) (f32.const 101)) (f32.const 2601)) -(assert_return (invoke "nesting" (f32.const 2) (f32.const 1)) (f32.const 1)) -(assert_return (invoke "nesting" (f32.const 3) (f32.const 1)) (f32.const 1)) -(assert_return (invoke "nesting" (f32.const 10) (f32.const 1)) (f32.const 1)) -(assert_return (invoke "nesting" (f32.const 2) (f32.const 2)) (f32.const 3)) -(assert_return (invoke "nesting" (f32.const 2) (f32.const 3)) (f32.const 4)) -(assert_return (invoke "nesting" (f32.const 7) (f32.const 4)) (f32.const 10.3095235825)) -(assert_return (invoke "nesting" (f32.const 7) (f32.const 100)) (f32.const 4381.54785156)) -(assert_return (invoke "nesting" (f32.const 7) (f32.const 101)) (f32.const 2601)) - -(assert_invalid - (module (func $type-empty-i32 (result i32) (loop))) - "type mismatch" -) -(assert_invalid - (module (func $type-empty-i64 (result i64) (loop))) - "type mismatch" -) -(assert_invalid - (module (func $type-empty-f32 (result f32) (loop))) - "type mismatch" -) -(assert_invalid - (module (func $type-empty-f64 (result f64) (loop))) - "type mismatch" -) - -(assert_invalid - (module (func $type-value-num-vs-void - (loop (i32.const 1)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-empty-vs-num (result i32) - (loop (result i32)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-void-vs-num (result i32) - (loop (result i32) (nop)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-num-vs-num (result i32) - (loop (result i32) (f32.const 0)) - )) - "type mismatch" -) -(assert_invalid - (module (func $type-value-unreached-select (result i32) - (loop (result i64) (select (unreachable) (unreachable) (unreachable))) - )) - "type mismatch" -) - -(assert_invalid - (module - (func $type-value-empty-in-block - (i32.const 0) - (block (loop (result i32)) (drop)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func $type-value-empty-in-loop - (i32.const 0) - (loop (loop (result i32)) (drop)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func $type-value-empty-in-then - (i32.const 0) (i32.const 0) - (if (then (loop (result i32)) (drop))) - ) - ) - "type mismatch" -) - - -(assert_malformed - (module quote "(func loop end $l)") - "mismatching label" -) -(assert_malformed - (module quote "(func loop $a end $l)") - "mismatching label" -) diff --git a/test/spec/memory.wast b/test/spec/memory.wast deleted file mode 100644 index c4e932b0ecd..00000000000 --- a/test/spec/memory.wast +++ /dev/null @@ -1,209 +0,0 @@ -;; Test memory section structure - -(module (memory 0 0)) -(module (memory 0 1)) -(module (memory 1 256)) -(module (memory 0 65536)) - -(module (memory (data)) (func (export "memsize") (result i32) (memory.size))) -(assert_return (invoke "memsize") (i32.const 0)) -(module (memory (data "")) (func (export "memsize") (result i32) (memory.size))) -(assert_return (invoke "memsize") (i32.const 0)) -(module (memory (data "x")) (func (export "memsize") (result i32) (memory.size))) -(assert_return (invoke "memsize") (i32.const 1)) - -(assert_invalid (module (data (i32.const 0))) "unknown memory") -(assert_invalid (module (data (i32.const 0) "")) "unknown memory") -(assert_invalid (module (data (i32.const 0) "x")) "unknown memory") - -(assert_invalid - (module (func (drop (f32.load (i32.const 0))))) - "unknown memory" -) -(assert_invalid - (module (func (f32.store (i32.const 0) (f32.const 0)))) - "unknown memory" -) -(assert_invalid - (module (func (drop (i32.load8_s (i32.const 0))))) - "unknown memory" -) -(assert_invalid - (module (func (i32.store8 (i32.const 0) (i32.const 0)))) - "unknown memory" -) -(assert_invalid - (module (func (drop (memory.size)))) - "unknown memory" -) -(assert_invalid - (module (func (drop (memory.grow (i32.const 0))))) - "unknown memory" -) - - -(assert_invalid - (module (memory 1 0)) - "size minimum must not be greater than maximum" -) -(assert_invalid - (module (memory 65537)) - "memory size must be at most 65536 pages (4GiB)" -) -(assert_invalid - (module (memory 2147483648)) - "memory size must be at most 65536 pages (4GiB)" -) -(assert_invalid - (module (memory 4294967295)) - "memory size must be at most 65536 pages (4GiB)" -) -(assert_invalid - (module (memory 0 65537)) - "memory size must be at most 65536 pages (4GiB)" -) -(assert_invalid - (module (memory 0 2147483648)) - "memory size must be at most 65536 pages (4GiB)" -) -(assert_invalid - (module (memory 0 4294967295)) - "memory size must be at most 65536 pages (4GiB)" -) - -(module - (memory 1) - (data (i32.const 0) "ABC\a7D") (data (i32.const 20) "WASM") - - ;; Data section - (func (export "data") (result i32) - (i32.and - (i32.and - (i32.and - (i32.eq (i32.load8_u (i32.const 0)) (i32.const 65)) - (i32.eq (i32.load8_u (i32.const 3)) (i32.const 167)) - ) - (i32.and - (i32.eq (i32.load8_u (i32.const 6)) (i32.const 0)) - (i32.eq (i32.load8_u (i32.const 19)) (i32.const 0)) - ) - ) - (i32.and - (i32.and - (i32.eq (i32.load8_u (i32.const 20)) (i32.const 87)) - (i32.eq (i32.load8_u (i32.const 23)) (i32.const 77)) - ) - (i32.and - (i32.eq (i32.load8_u (i32.const 24)) (i32.const 0)) - (i32.eq (i32.load8_u (i32.const 1023)) (i32.const 0)) - ) - ) - ) - ) - - ;; Memory cast - (func (export "cast") (result f64) - (i64.store (i32.const 8) (i64.const -12345)) - (if - (f64.eq - (f64.load (i32.const 8)) - (f64.reinterpret_i64 (i64.const -12345)) - ) - (then (return (f64.const 0))) - ) - (i64.store align=1 (i32.const 9) (i64.const 0)) - (i32.store16 align=1 (i32.const 15) (i32.const 16453)) - (f64.load align=1 (i32.const 9)) - ) - - ;; Sign and zero extending memory loads - (func (export "i32_load8_s") (param $i i32) (result i32) - (i32.store8 (i32.const 8) (local.get $i)) - (i32.load8_s (i32.const 8)) - ) - (func (export "i32_load8_u") (param $i i32) (result i32) - (i32.store8 (i32.const 8) (local.get $i)) - (i32.load8_u (i32.const 8)) - ) - (func (export "i32_load16_s") (param $i i32) (result i32) - (i32.store16 (i32.const 8) (local.get $i)) - (i32.load16_s (i32.const 8)) - ) - (func (export "i32_load16_u") (param $i i32) (result i32) - (i32.store16 (i32.const 8) (local.get $i)) - (i32.load16_u (i32.const 8)) - ) - (func (export "i64_load8_s") (param $i i64) (result i64) - (i64.store8 (i32.const 8) (local.get $i)) - (i64.load8_s (i32.const 8)) - ) - (func (export "i64_load8_u") (param $i i64) (result i64) - (i64.store8 (i32.const 8) (local.get $i)) - (i64.load8_u (i32.const 8)) - ) - (func (export "i64_load16_s") (param $i i64) (result i64) - (i64.store16 (i32.const 8) (local.get $i)) - (i64.load16_s (i32.const 8)) - ) - (func (export "i64_load16_u") (param $i i64) (result i64) - (i64.store16 (i32.const 8) (local.get $i)) - (i64.load16_u (i32.const 8)) - ) - (func (export "i64_load32_s") (param $i i64) (result i64) - (i64.store32 (i32.const 8) (local.get $i)) - (i64.load32_s (i32.const 8)) - ) - (func (export "i64_load32_u") (param $i i64) (result i64) - (i64.store32 (i32.const 8) (local.get $i)) - (i64.load32_u (i32.const 8)) - ) -) - -(assert_return (invoke "data") (i32.const 1)) -(assert_return (invoke "cast") (f64.const 42.0)) - -(assert_return (invoke "i32_load8_s" (i32.const -1)) (i32.const -1)) -(assert_return (invoke "i32_load8_u" (i32.const -1)) (i32.const 255)) -(assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1)) -(assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 65535)) - -(assert_return (invoke "i32_load8_s" (i32.const 100)) (i32.const 100)) -(assert_return (invoke "i32_load8_u" (i32.const 200)) (i32.const 200)) -(assert_return (invoke "i32_load16_s" (i32.const 20000)) (i32.const 20000)) -(assert_return (invoke "i32_load16_u" (i32.const 40000)) (i32.const 40000)) - -(assert_return (invoke "i32_load8_s" (i32.const 0xfedc6543)) (i32.const 0x43)) -(assert_return (invoke "i32_load8_s" (i32.const 0x3456cdef)) (i32.const 0xffffffef)) -(assert_return (invoke "i32_load8_u" (i32.const 0xfedc6543)) (i32.const 0x43)) -(assert_return (invoke "i32_load8_u" (i32.const 0x3456cdef)) (i32.const 0xef)) -(assert_return (invoke "i32_load16_s" (i32.const 0xfedc6543)) (i32.const 0x6543)) -(assert_return (invoke "i32_load16_s" (i32.const 0x3456cdef)) (i32.const 0xffffcdef)) -(assert_return (invoke "i32_load16_u" (i32.const 0xfedc6543)) (i32.const 0x6543)) -(assert_return (invoke "i32_load16_u" (i32.const 0x3456cdef)) (i32.const 0xcdef)) - -(assert_return (invoke "i64_load8_s" (i64.const -1)) (i64.const -1)) -(assert_return (invoke "i64_load8_u" (i64.const -1)) (i64.const 255)) -(assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1)) -(assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 65535)) -(assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1)) -(assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 4294967295)) - -(assert_return (invoke "i64_load8_s" (i64.const 100)) (i64.const 100)) -(assert_return (invoke "i64_load8_u" (i64.const 200)) (i64.const 200)) -(assert_return (invoke "i64_load16_s" (i64.const 20000)) (i64.const 20000)) -(assert_return (invoke "i64_load16_u" (i64.const 40000)) (i64.const 40000)) -(assert_return (invoke "i64_load32_s" (i64.const 20000)) (i64.const 20000)) -(assert_return (invoke "i64_load32_u" (i64.const 40000)) (i64.const 40000)) - -(assert_return (invoke "i64_load8_s" (i64.const 0xfedcba9856346543)) (i64.const 0x43)) -(assert_return (invoke "i64_load8_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffffffffffef)) -(assert_return (invoke "i64_load8_u" (i64.const 0xfedcba9856346543)) (i64.const 0x43)) -(assert_return (invoke "i64_load8_u" (i64.const 0x3456436598bacdef)) (i64.const 0xef)) -(assert_return (invoke "i64_load16_s" (i64.const 0xfedcba9856346543)) (i64.const 0x6543)) -(assert_return (invoke "i64_load16_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffffffffcdef)) -(assert_return (invoke "i64_load16_u" (i64.const 0xfedcba9856346543)) (i64.const 0x6543)) -(assert_return (invoke "i64_load16_u" (i64.const 0x3456436598bacdef)) (i64.const 0xcdef)) -(assert_return (invoke "i64_load32_s" (i64.const 0xfedcba9856346543)) (i64.const 0x56346543)) -(assert_return (invoke "i64_load32_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffff98bacdef)) -(assert_return (invoke "i64_load32_u" (i64.const 0xfedcba9856346543)) (i64.const 0x56346543)) -(assert_return (invoke "i64_load32_u" (i64.const 0x3456436598bacdef)) (i64.const 0x98bacdef)) diff --git a/test/spec/ref_eq.wast b/test/spec/ref_eq.wast deleted file mode 100644 index 001efd69f89..00000000000 --- a/test/spec/ref_eq.wast +++ /dev/null @@ -1,168 +0,0 @@ -(module - (type $st (sub (struct))) - (type $st' (sub (struct (field i32)))) - (type $at (array i8)) - (type $st-sub1 (sub $st (struct))) - (type $st-sub2 (sub $st (struct))) - (type $st'-sub1 (sub $st' (struct (field i32)))) - (type $st'-sub2 (sub $st' (struct (field i32)))) - - (table 20 (ref null eq)) - - (func (export "init") - (table.set (i32.const 0) (ref.null eq)) - (table.set (i32.const 1) (ref.null i31)) - (table.set (i32.const 2) (ref.i31 (i32.const 7))) - (table.set (i32.const 3) (ref.i31 (i32.const 7))) - (table.set (i32.const 4) (ref.i31 (i32.const 8))) - (table.set (i32.const 5) (struct.new_default $st)) - (table.set (i32.const 6) (struct.new_default $st)) - (table.set (i32.const 7) (array.new_default $at (i32.const 0))) - (table.set (i32.const 8) (array.new_default $at (i32.const 0))) - ) - - (func (export "eq") (param $i i32) (param $j i32) (result i32) - (ref.eq (table.get (local.get $i)) (table.get (local.get $j))) - ) -) - -(invoke "init") - -(assert_return (invoke "eq" (i32.const 0) (i32.const 0)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 0) (i32.const 1)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 0) (i32.const 2)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 0) (i32.const 3)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 0) (i32.const 4)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 0) (i32.const 5)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 0) (i32.const 6)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 0) (i32.const 7)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 0) (i32.const 8)) (i32.const 0)) - -(assert_return (invoke "eq" (i32.const 1) (i32.const 0)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 1) (i32.const 1)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 1) (i32.const 2)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 1) (i32.const 3)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 1) (i32.const 4)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 1) (i32.const 5)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 1) (i32.const 6)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 1) (i32.const 7)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 1) (i32.const 8)) (i32.const 0)) - -(assert_return (invoke "eq" (i32.const 2) (i32.const 0)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 2) (i32.const 1)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 2) (i32.const 2)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 2) (i32.const 3)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 2) (i32.const 4)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 2) (i32.const 5)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 2) (i32.const 6)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 2) (i32.const 7)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 2) (i32.const 8)) (i32.const 0)) - -(assert_return (invoke "eq" (i32.const 3) (i32.const 0)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 3) (i32.const 1)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 3) (i32.const 2)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 3) (i32.const 3)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 3) (i32.const 4)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 3) (i32.const 5)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 3) (i32.const 6)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 3) (i32.const 7)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 3) (i32.const 8)) (i32.const 0)) - -(assert_return (invoke "eq" (i32.const 4) (i32.const 0)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 4) (i32.const 1)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 4) (i32.const 2)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 4) (i32.const 3)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 4) (i32.const 4)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 4) (i32.const 5)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 4) (i32.const 6)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 4) (i32.const 7)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 4) (i32.const 8)) (i32.const 0)) - -(assert_return (invoke "eq" (i32.const 5) (i32.const 0)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 5) (i32.const 1)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 5) (i32.const 2)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 5) (i32.const 3)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 5) (i32.const 4)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 5) (i32.const 5)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 5) (i32.const 6)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 5) (i32.const 7)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 5) (i32.const 8)) (i32.const 0)) - -(assert_return (invoke "eq" (i32.const 6) (i32.const 0)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 6) (i32.const 1)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 6) (i32.const 2)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 6) (i32.const 3)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 6) (i32.const 4)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 6) (i32.const 5)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 6) (i32.const 6)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 6) (i32.const 7)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 6) (i32.const 8)) (i32.const 0)) - -(assert_return (invoke "eq" (i32.const 7) (i32.const 0)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 7) (i32.const 1)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 7) (i32.const 2)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 7) (i32.const 3)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 7) (i32.const 4)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 7) (i32.const 5)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 7) (i32.const 6)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 7) (i32.const 7)) (i32.const 1)) -(assert_return (invoke "eq" (i32.const 7) (i32.const 8)) (i32.const 0)) - -(assert_return (invoke "eq" (i32.const 8) (i32.const 0)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 8) (i32.const 1)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 8) (i32.const 2)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 8) (i32.const 3)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 8) (i32.const 4)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 8) (i32.const 5)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 8) (i32.const 6)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 8) (i32.const 7)) (i32.const 0)) -(assert_return (invoke "eq" (i32.const 8) (i32.const 8)) (i32.const 1)) - -(assert_invalid - (module - (func (export "eq") (param $r (ref any)) (result i32) - (ref.eq (local.get $r) (local.get $r)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func (export "eq") (param $r (ref null any)) (result i32) - (ref.eq (local.get $r) (local.get $r)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func (export "eq") (param $r (ref func)) (result i32) - (ref.eq (local.get $r) (local.get $r)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func (export "eq") (param $r (ref null func)) (result i32) - (ref.eq (local.get $r) (local.get $r)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func (export "eq") (param $r (ref extern)) (result i32) - (ref.eq (local.get $r) (local.get $r)) - ) - ) - "type mismatch" -) -(assert_invalid - (module - (func (export "eq") (param $r (ref null extern)) (result i32) - (ref.eq (local.get $r) (local.get $r)) - ) - ) - "type mismatch" -) diff --git a/test/spec/ref_is_null.wast b/test/spec/ref_is_null.wast deleted file mode 100644 index 8f820d2bc7e..00000000000 --- a/test/spec/ref_is_null.wast +++ /dev/null @@ -1,11 +0,0 @@ -(module - (func $f1 (export "externref") (param $x externref) (result i32) - (ref.is_null (local.get $x)) - ) - (func $f2 (export "funcref") (param $x funcref) (result i32) - (ref.is_null (local.get $x)) - ) -) - -(assert_return (invoke "externref" (ref.null extern)) (i32.const 1)) -(assert_return (invoke "funcref" (ref.null func)) (i32.const 1)) diff --git a/test/spec/ref_null.wast b/test/spec/ref_null.wast deleted file mode 100644 index b88b0888fd8..00000000000 --- a/test/spec/ref_null.wast +++ /dev/null @@ -1,10 +0,0 @@ -(module - (func (export "externref") (result externref) (ref.null extern)) - (func (export "funcref") (result funcref) (ref.null func)) - - (global externref (ref.null extern)) - (global funcref (ref.null func)) -) - -(assert_return (invoke "externref") (ref.null extern)) -(assert_return (invoke "funcref") (ref.null func)) diff --git a/test/spec/table.wast b/test/spec/table.wast deleted file mode 100644 index d61a7d1b702..00000000000 --- a/test/spec/table.wast +++ /dev/null @@ -1,76 +0,0 @@ -;; Test table section structure - -(module (table 0 funcref)) -(module (table 1 funcref)) -(module (table 0 0 funcref)) -(module (table 0 1 funcref)) -(module (table 1 256 funcref)) -(module (table 0 65536 funcref)) -(module (table 0 0xffff_ffff funcref)) - -(module (table 0 funcref) (table 0 funcref)) -(module (table (import "spectest" "table") 0 funcref) (table 0 funcref)) - -(assert_invalid - (module (table 1 0 funcref)) - "size minimum must not be greater than maximum" -) -(assert_invalid - (module (table 0xffff_ffff 0 funcref)) - "size minimum must not be greater than maximum" -) - -(assert_invalid - (module quote "(table 0x1_0000_0000 funcref)") - "table size must be at most 2^32-1" -) -(assert_invalid - (module quote "(table 0x1_0000_0000 0x1_0000_0000 funcref)") - "table size must be at most 2^32-1" -) -(assert_invalid - (module quote "(table 0 0x1_0000_0000 funcref)") - "table size must be at most 2^32-1" -) - -;; Same as above but with i64 index types - -(module (table i64 0 funcref)) -(module (table i64 1 funcref)) -(module (table i64 0 0 funcref)) -(module (table i64 0 1 funcref)) -(module (table i64 1 256 funcref)) -(module (table i64 0 65536 funcref)) -(module (table i64 0 0xffff_ffff funcref)) - -(module (table i64 0 funcref) (table i64 0 funcref)) -(module (table (import "spectest" "table64") i64 0 funcref) (table i64 0 funcref)) - -(assert_invalid - (module (table i64 1 0 funcref)) - "size minimum must not be greater than maximum" -) -(assert_invalid - (module (table i64 0xffff_ffff 0 funcref)) - "size minimum must not be greater than maximum" -) - -;; Elem segments with no table - -(assert_invalid (module (elem (i32.const 0))) "unknown table") -(assert_invalid (module (elem (i32.const 0) $f) (func $f)) "unknown table") - -;; Duplicate table identifiers - -(assert_malformed (module quote - "(table $foo 1 funcref)" - "(table $foo 1 funcref)") - "duplicate table") -(assert_malformed (module quote - "(import \"\" \"\" (table $foo 1 funcref))" - "(table $foo 1 funcref)") - "duplicate table") -(assert_malformed (module quote - "(import \"\" \"\" (table $foo 1 funcref))" - "(import \"\" \"\" (table $foo 1 funcref))") - "duplicate table")