...
1;; Test memory section structure
2
3(module (memory 0))
4(module (memory 1))
5(module (memory 0 0))
6(module (memory 0 1))
7(module (memory 1 256))
8(module (memory 0 65536))
9
10(assert_invalid (module (memory 0) (memory 0)) "multiple memories")
11(assert_invalid (module (memory (import "spectest" "memory") 0) (memory 0)) "multiple memories")
12
13(module (memory (data)) (func (export "memsize") (result i32) (memory.size)))
14(assert_return (invoke "memsize") (i32.const 0))
15(module (memory (data "")) (func (export "memsize") (result i32) (memory.size)))
16(assert_return (invoke "memsize") (i32.const 0))
17(module (memory (data "x")) (func (export "memsize") (result i32) (memory.size)))
18(assert_return (invoke "memsize") (i32.const 1))
19
20(assert_invalid (module (data (i32.const 0))) "unknown memory")
21(assert_invalid (module (data (i32.const 0) "")) "unknown memory")
22(assert_invalid (module (data (i32.const 0) "x")) "unknown memory")
23
24(assert_invalid
25 (module (func (drop (f32.load (i32.const 0)))))
26 "unknown memory"
27)
28(assert_invalid
29 (module (func (f32.store (i32.const 0) (f32.const 0))))
30 "unknown memory"
31)
32(assert_invalid
33 (module (func (drop (i32.load8_s (i32.const 0)))))
34 "unknown memory"
35)
36(assert_invalid
37 (module (func (i32.store8 (i32.const 0) (i32.const 0))))
38 "unknown memory"
39)
40(assert_invalid
41 (module (func (drop (memory.size))))
42 "unknown memory"
43)
44(assert_invalid
45 (module (func (drop (memory.grow (i32.const 0)))))
46 "unknown memory"
47)
48
49
50(assert_invalid
51 (module (memory 1 0))
52 "size minimum must not be greater than maximum"
53)
54(assert_invalid
55 (module (memory 65537))
56 "memory size must be at most 65536 pages (4GiB)"
57)
58(assert_invalid
59 (module (memory 2147483648))
60 "memory size must be at most 65536 pages (4GiB)"
61)
62(assert_invalid
63 (module (memory 4294967295))
64 "memory size must be at most 65536 pages (4GiB)"
65)
66(assert_invalid
67 (module (memory 0 65537))
68 "memory size must be at most 65536 pages (4GiB)"
69)
70(assert_invalid
71 (module (memory 0 2147483648))
72 "memory size must be at most 65536 pages (4GiB)"
73)
74(assert_invalid
75 (module (memory 0 4294967295))
76 "memory size must be at most 65536 pages (4GiB)"
77)
78
79(assert_malformed
80 (module quote "(memory 0x1_0000_0000)")
81 "i32 constant out of range"
82)
83(assert_malformed
84 (module quote "(memory 0x1_0000_0000 0x1_0000_0000)")
85 "i32 constant out of range"
86)
87(assert_malformed
88 (module quote "(memory 0 0x1_0000_0000)")
89 "i32 constant out of range"
90)
91
92(module
93 (memory 1)
94 (data (i32.const 0) "ABC\a7D") (data (i32.const 20) "WASM")
95
96 ;; Data section
97 (func (export "data") (result i32)
98 (i32.and
99 (i32.and
100 (i32.and
101 (i32.eq (i32.load8_u (i32.const 0)) (i32.const 65))
102 (i32.eq (i32.load8_u (i32.const 3)) (i32.const 167))
103 )
104 (i32.and
105 (i32.eq (i32.load8_u (i32.const 6)) (i32.const 0))
106 (i32.eq (i32.load8_u (i32.const 19)) (i32.const 0))
107 )
108 )
109 (i32.and
110 (i32.and
111 (i32.eq (i32.load8_u (i32.const 20)) (i32.const 87))
112 (i32.eq (i32.load8_u (i32.const 23)) (i32.const 77))
113 )
114 (i32.and
115 (i32.eq (i32.load8_u (i32.const 24)) (i32.const 0))
116 (i32.eq (i32.load8_u (i32.const 1023)) (i32.const 0))
117 )
118 )
119 )
120 )
121
122 ;; Memory cast
123 (func (export "cast") (result f64)
124 (i64.store (i32.const 8) (i64.const -12345))
125 (if
126 (f64.eq
127 (f64.load (i32.const 8))
128 (f64.reinterpret_i64 (i64.const -12345))
129 )
130 (then (return (f64.const 0)))
131 )
132 (i64.store align=1 (i32.const 9) (i64.const 0))
133 (i32.store16 align=1 (i32.const 15) (i32.const 16453))
134 (f64.load align=1 (i32.const 9))
135 )
136
137 ;; Sign and zero extending memory loads
138 (func (export "i32_load8_s") (param $i i32) (result i32)
139 (i32.store8 (i32.const 8) (local.get $i))
140 (i32.load8_s (i32.const 8))
141 )
142 (func (export "i32_load8_u") (param $i i32) (result i32)
143 (i32.store8 (i32.const 8) (local.get $i))
144 (i32.load8_u (i32.const 8))
145 )
146 (func (export "i32_load16_s") (param $i i32) (result i32)
147 (i32.store16 (i32.const 8) (local.get $i))
148 (i32.load16_s (i32.const 8))
149 )
150 (func (export "i32_load16_u") (param $i i32) (result i32)
151 (i32.store16 (i32.const 8) (local.get $i))
152 (i32.load16_u (i32.const 8))
153 )
154 (func (export "i64_load8_s") (param $i i64) (result i64)
155 (i64.store8 (i32.const 8) (local.get $i))
156 (i64.load8_s (i32.const 8))
157 )
158 (func (export "i64_load8_u") (param $i i64) (result i64)
159 (i64.store8 (i32.const 8) (local.get $i))
160 (i64.load8_u (i32.const 8))
161 )
162 (func (export "i64_load16_s") (param $i i64) (result i64)
163 (i64.store16 (i32.const 8) (local.get $i))
164 (i64.load16_s (i32.const 8))
165 )
166 (func (export "i64_load16_u") (param $i i64) (result i64)
167 (i64.store16 (i32.const 8) (local.get $i))
168 (i64.load16_u (i32.const 8))
169 )
170 (func (export "i64_load32_s") (param $i i64) (result i64)
171 (i64.store32 (i32.const 8) (local.get $i))
172 (i64.load32_s (i32.const 8))
173 )
174 (func (export "i64_load32_u") (param $i i64) (result i64)
175 (i64.store32 (i32.const 8) (local.get $i))
176 (i64.load32_u (i32.const 8))
177 )
178)
179
180(assert_return (invoke "data") (i32.const 1))
181(assert_return (invoke "cast") (f64.const 42.0))
182
183(assert_return (invoke "i32_load8_s" (i32.const -1)) (i32.const -1))
184(assert_return (invoke "i32_load8_u" (i32.const -1)) (i32.const 255))
185(assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1))
186(assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 65535))
187
188(assert_return (invoke "i32_load8_s" (i32.const 100)) (i32.const 100))
189(assert_return (invoke "i32_load8_u" (i32.const 200)) (i32.const 200))
190(assert_return (invoke "i32_load16_s" (i32.const 20000)) (i32.const 20000))
191(assert_return (invoke "i32_load16_u" (i32.const 40000)) (i32.const 40000))
192
193(assert_return (invoke "i32_load8_s" (i32.const 0xfedc6543)) (i32.const 0x43))
194(assert_return (invoke "i32_load8_s" (i32.const 0x3456cdef)) (i32.const 0xffffffef))
195(assert_return (invoke "i32_load8_u" (i32.const 0xfedc6543)) (i32.const 0x43))
196(assert_return (invoke "i32_load8_u" (i32.const 0x3456cdef)) (i32.const 0xef))
197(assert_return (invoke "i32_load16_s" (i32.const 0xfedc6543)) (i32.const 0x6543))
198(assert_return (invoke "i32_load16_s" (i32.const 0x3456cdef)) (i32.const 0xffffcdef))
199(assert_return (invoke "i32_load16_u" (i32.const 0xfedc6543)) (i32.const 0x6543))
200(assert_return (invoke "i32_load16_u" (i32.const 0x3456cdef)) (i32.const 0xcdef))
201
202(assert_return (invoke "i64_load8_s" (i64.const -1)) (i64.const -1))
203(assert_return (invoke "i64_load8_u" (i64.const -1)) (i64.const 255))
204(assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1))
205(assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 65535))
206(assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1))
207(assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 4294967295))
208
209(assert_return (invoke "i64_load8_s" (i64.const 100)) (i64.const 100))
210(assert_return (invoke "i64_load8_u" (i64.const 200)) (i64.const 200))
211(assert_return (invoke "i64_load16_s" (i64.const 20000)) (i64.const 20000))
212(assert_return (invoke "i64_load16_u" (i64.const 40000)) (i64.const 40000))
213(assert_return (invoke "i64_load32_s" (i64.const 20000)) (i64.const 20000))
214(assert_return (invoke "i64_load32_u" (i64.const 40000)) (i64.const 40000))
215
216(assert_return (invoke "i64_load8_s" (i64.const 0xfedcba9856346543)) (i64.const 0x43))
217(assert_return (invoke "i64_load8_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffffffffffef))
218(assert_return (invoke "i64_load8_u" (i64.const 0xfedcba9856346543)) (i64.const 0x43))
219(assert_return (invoke "i64_load8_u" (i64.const 0x3456436598bacdef)) (i64.const 0xef))
220(assert_return (invoke "i64_load16_s" (i64.const 0xfedcba9856346543)) (i64.const 0x6543))
221(assert_return (invoke "i64_load16_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffffffffcdef))
222(assert_return (invoke "i64_load16_u" (i64.const 0xfedcba9856346543)) (i64.const 0x6543))
223(assert_return (invoke "i64_load16_u" (i64.const 0x3456436598bacdef)) (i64.const 0xcdef))
224(assert_return (invoke "i64_load32_s" (i64.const 0xfedcba9856346543)) (i64.const 0x56346543))
225(assert_return (invoke "i64_load32_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffff98bacdef))
226(assert_return (invoke "i64_load32_u" (i64.const 0xfedcba9856346543)) (i64.const 0x56346543))
227(assert_return (invoke "i64_load32_u" (i64.const 0x3456436598bacdef)) (i64.const 0x98bacdef))
228
229;; Duplicate identifier errors
230
231(assert_malformed (module quote
232 "(memory $foo 1)"
233 "(memory $foo 1)")
234 "duplicate memory")
235(assert_malformed (module quote
236 "(import \"\" \"\" (memory $foo 1))"
237 "(memory $foo 1)")
238 "duplicate memory")
239(assert_malformed (module quote
240 "(import \"\" \"\" (memory $foo 1))"
241 "(import \"\" \"\" (memory $foo 1))")
242 "duplicate memory")
View as plain text