...
1;; Load i32 data with different offset/align arguments
2
3(module
4 (memory 1)
5 (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz")
6
7 (func (export "8u_good1") (param $i i32) (result i32)
8 (i32.load8_u offset=0 (local.get $i)) ;; 97 'a'
9 )
10 (func (export "8u_good2") (param $i i32) (result i32)
11 (i32.load8_u align=1 (local.get $i)) ;; 97 'a'
12 )
13 (func (export "8u_good3") (param $i i32) (result i32)
14 (i32.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b'
15 )
16 (func (export "8u_good4") (param $i i32) (result i32)
17 (i32.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c'
18 )
19 (func (export "8u_good5") (param $i i32) (result i32)
20 (i32.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z'
21 )
22
23 (func (export "8s_good1") (param $i i32) (result i32)
24 (i32.load8_s offset=0 (local.get $i)) ;; 97 'a'
25 )
26 (func (export "8s_good2") (param $i i32) (result i32)
27 (i32.load8_s align=1 (local.get $i)) ;; 97 'a'
28 )
29 (func (export "8s_good3") (param $i i32) (result i32)
30 (i32.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b'
31 )
32 (func (export "8s_good4") (param $i i32) (result i32)
33 (i32.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c'
34 )
35 (func (export "8s_good5") (param $i i32) (result i32)
36 (i32.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z'
37 )
38
39 (func (export "16u_good1") (param $i i32) (result i32)
40 (i32.load16_u offset=0 (local.get $i)) ;; 25185 'ab'
41 )
42 (func (export "16u_good2") (param $i i32) (result i32)
43 (i32.load16_u align=1 (local.get $i)) ;; 25185 'ab'
44 )
45 (func (export "16u_good3") (param $i i32) (result i32)
46 (i32.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc'
47 )
48 (func (export "16u_good4") (param $i i32) (result i32)
49 (i32.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd'
50 )
51 (func (export "16u_good5") (param $i i32) (result i32)
52 (i32.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0'
53 )
54
55 (func (export "16s_good1") (param $i i32) (result i32)
56 (i32.load16_s offset=0 (local.get $i)) ;; 25185 'ab'
57 )
58 (func (export "16s_good2") (param $i i32) (result i32)
59 (i32.load16_s align=1 (local.get $i)) ;; 25185 'ab'
60 )
61 (func (export "16s_good3") (param $i i32) (result i32)
62 (i32.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc'
63 )
64 (func (export "16s_good4") (param $i i32) (result i32)
65 (i32.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd'
66 )
67 (func (export "16s_good5") (param $i i32) (result i32)
68 (i32.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0'
69 )
70
71 (func (export "32_good1") (param $i i32) (result i32)
72 (i32.load offset=0 (local.get $i)) ;; 1684234849 'abcd'
73 )
74 (func (export "32_good2") (param $i i32) (result i32)
75 (i32.load align=1 (local.get $i)) ;; 1684234849 'abcd'
76 )
77 (func (export "32_good3") (param $i i32) (result i32)
78 (i32.load offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde'
79 )
80 (func (export "32_good4") (param $i i32) (result i32)
81 (i32.load offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef'
82 )
83 (func (export "32_good5") (param $i i32) (result i32)
84 (i32.load offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0'
85 )
86
87 (func (export "8u_bad") (param $i i32)
88 (drop (i32.load8_u offset=4294967295 (local.get $i)))
89 )
90 (func (export "8s_bad") (param $i i32)
91 (drop (i32.load8_s offset=4294967295 (local.get $i)))
92 )
93 (func (export "16u_bad") (param $i i32)
94 (drop (i32.load16_u offset=4294967295 (local.get $i)))
95 )
96 (func (export "16s_bad") (param $i i32)
97 (drop (i32.load16_s offset=4294967295 (local.get $i)))
98 )
99 (func (export "32_bad") (param $i i32)
100 (drop (i32.load offset=4294967295 (local.get $i)))
101 )
102)
103
104(assert_return (invoke "8u_good1" (i32.const 0)) (i32.const 97))
105(assert_return (invoke "8u_good2" (i32.const 0)) (i32.const 97))
106(assert_return (invoke "8u_good3" (i32.const 0)) (i32.const 98))
107(assert_return (invoke "8u_good4" (i32.const 0)) (i32.const 99))
108(assert_return (invoke "8u_good5" (i32.const 0)) (i32.const 122))
109
110(assert_return (invoke "8s_good1" (i32.const 0)) (i32.const 97))
111(assert_return (invoke "8s_good2" (i32.const 0)) (i32.const 97))
112(assert_return (invoke "8s_good3" (i32.const 0)) (i32.const 98))
113(assert_return (invoke "8s_good4" (i32.const 0)) (i32.const 99))
114(assert_return (invoke "8s_good5" (i32.const 0)) (i32.const 122))
115
116(assert_return (invoke "16u_good1" (i32.const 0)) (i32.const 25185))
117(assert_return (invoke "16u_good2" (i32.const 0)) (i32.const 25185))
118(assert_return (invoke "16u_good3" (i32.const 0)) (i32.const 25442))
119(assert_return (invoke "16u_good4" (i32.const 0)) (i32.const 25699))
120(assert_return (invoke "16u_good5" (i32.const 0)) (i32.const 122))
121
122(assert_return (invoke "16s_good1" (i32.const 0)) (i32.const 25185))
123(assert_return (invoke "16s_good2" (i32.const 0)) (i32.const 25185))
124(assert_return (invoke "16s_good3" (i32.const 0)) (i32.const 25442))
125(assert_return (invoke "16s_good4" (i32.const 0)) (i32.const 25699))
126(assert_return (invoke "16s_good5" (i32.const 0)) (i32.const 122))
127
128(assert_return (invoke "32_good1" (i32.const 0)) (i32.const 1684234849))
129(assert_return (invoke "32_good2" (i32.const 0)) (i32.const 1684234849))
130(assert_return (invoke "32_good3" (i32.const 0)) (i32.const 1701077858))
131(assert_return (invoke "32_good4" (i32.const 0)) (i32.const 1717920867))
132(assert_return (invoke "32_good5" (i32.const 0)) (i32.const 122))
133
134(assert_return (invoke "8u_good1" (i32.const 65507)) (i32.const 0))
135(assert_return (invoke "8u_good2" (i32.const 65507)) (i32.const 0))
136(assert_return (invoke "8u_good3" (i32.const 65507)) (i32.const 0))
137(assert_return (invoke "8u_good4" (i32.const 65507)) (i32.const 0))
138(assert_return (invoke "8u_good5" (i32.const 65507)) (i32.const 0))
139
140(assert_return (invoke "8s_good1" (i32.const 65507)) (i32.const 0))
141(assert_return (invoke "8s_good2" (i32.const 65507)) (i32.const 0))
142(assert_return (invoke "8s_good3" (i32.const 65507)) (i32.const 0))
143(assert_return (invoke "8s_good4" (i32.const 65507)) (i32.const 0))
144(assert_return (invoke "8s_good5" (i32.const 65507)) (i32.const 0))
145
146(assert_return (invoke "16u_good1" (i32.const 65507)) (i32.const 0))
147(assert_return (invoke "16u_good2" (i32.const 65507)) (i32.const 0))
148(assert_return (invoke "16u_good3" (i32.const 65507)) (i32.const 0))
149(assert_return (invoke "16u_good4" (i32.const 65507)) (i32.const 0))
150(assert_return (invoke "16u_good5" (i32.const 65507)) (i32.const 0))
151
152(assert_return (invoke "16s_good1" (i32.const 65507)) (i32.const 0))
153(assert_return (invoke "16s_good2" (i32.const 65507)) (i32.const 0))
154(assert_return (invoke "16s_good3" (i32.const 65507)) (i32.const 0))
155(assert_return (invoke "16s_good4" (i32.const 65507)) (i32.const 0))
156(assert_return (invoke "16s_good5" (i32.const 65507)) (i32.const 0))
157
158(assert_return (invoke "32_good1" (i32.const 65507)) (i32.const 0))
159(assert_return (invoke "32_good2" (i32.const 65507)) (i32.const 0))
160(assert_return (invoke "32_good3" (i32.const 65507)) (i32.const 0))
161(assert_return (invoke "32_good4" (i32.const 65507)) (i32.const 0))
162(assert_return (invoke "32_good5" (i32.const 65507)) (i32.const 0))
163
164(assert_return (invoke "8u_good1" (i32.const 65508)) (i32.const 0))
165(assert_return (invoke "8u_good2" (i32.const 65508)) (i32.const 0))
166(assert_return (invoke "8u_good3" (i32.const 65508)) (i32.const 0))
167(assert_return (invoke "8u_good4" (i32.const 65508)) (i32.const 0))
168(assert_return (invoke "8u_good5" (i32.const 65508)) (i32.const 0))
169
170(assert_return (invoke "8s_good1" (i32.const 65508)) (i32.const 0))
171(assert_return (invoke "8s_good2" (i32.const 65508)) (i32.const 0))
172(assert_return (invoke "8s_good3" (i32.const 65508)) (i32.const 0))
173(assert_return (invoke "8s_good4" (i32.const 65508)) (i32.const 0))
174(assert_return (invoke "8s_good5" (i32.const 65508)) (i32.const 0))
175
176(assert_return (invoke "16u_good1" (i32.const 65508)) (i32.const 0))
177(assert_return (invoke "16u_good2" (i32.const 65508)) (i32.const 0))
178(assert_return (invoke "16u_good3" (i32.const 65508)) (i32.const 0))
179(assert_return (invoke "16u_good4" (i32.const 65508)) (i32.const 0))
180(assert_return (invoke "16u_good5" (i32.const 65508)) (i32.const 0))
181
182(assert_return (invoke "16s_good1" (i32.const 65508)) (i32.const 0))
183(assert_return (invoke "16s_good2" (i32.const 65508)) (i32.const 0))
184(assert_return (invoke "16s_good3" (i32.const 65508)) (i32.const 0))
185(assert_return (invoke "16s_good4" (i32.const 65508)) (i32.const 0))
186(assert_return (invoke "16s_good5" (i32.const 65508)) (i32.const 0))
187
188(assert_return (invoke "32_good1" (i32.const 65508)) (i32.const 0))
189(assert_return (invoke "32_good2" (i32.const 65508)) (i32.const 0))
190(assert_return (invoke "32_good3" (i32.const 65508)) (i32.const 0))
191(assert_return (invoke "32_good4" (i32.const 65508)) (i32.const 0))
192(assert_trap (invoke "32_good5" (i32.const 65508)) "out of bounds memory access")
193
194(assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access")
195(assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access")
196(assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access")
197(assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access")
198(assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access")
199
200(assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access")
201(assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access")
202(assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access")
203(assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access")
204(assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access")
205
206(assert_malformed
207 (module quote
208 "(memory 1)"
209 "(func (drop (i32.load offset=4294967296 (i32.const 0))))"
210 )
211 "i32 constant"
212)
213
214;; Load i64 data with different offset/align arguments
215
216(module
217 (memory 1)
218 (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz")
219
220 (func (export "8u_good1") (param $i i32) (result i64)
221 (i64.load8_u offset=0 (local.get $i)) ;; 97 'a'
222 )
223 (func (export "8u_good2") (param $i i32) (result i64)
224 (i64.load8_u align=1 (local.get $i)) ;; 97 'a'
225 )
226 (func (export "8u_good3") (param $i i32) (result i64)
227 (i64.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b'
228 )
229 (func (export "8u_good4") (param $i i32) (result i64)
230 (i64.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c'
231 )
232 (func (export "8u_good5") (param $i i32) (result i64)
233 (i64.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z'
234 )
235
236 (func (export "8s_good1") (param $i i32) (result i64)
237 (i64.load8_s offset=0 (local.get $i)) ;; 97 'a'
238 )
239 (func (export "8s_good2") (param $i i32) (result i64)
240 (i64.load8_s align=1 (local.get $i)) ;; 97 'a'
241 )
242 (func (export "8s_good3") (param $i i32) (result i64)
243 (i64.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b'
244 )
245 (func (export "8s_good4") (param $i i32) (result i64)
246 (i64.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c'
247 )
248 (func (export "8s_good5") (param $i i32) (result i64)
249 (i64.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z'
250 )
251
252 (func (export "16u_good1") (param $i i32) (result i64)
253 (i64.load16_u offset=0 (local.get $i)) ;; 25185 'ab'
254 )
255 (func (export "16u_good2") (param $i i32) (result i64)
256 (i64.load16_u align=1 (local.get $i)) ;; 25185 'ab'
257 )
258 (func (export "16u_good3") (param $i i32) (result i64)
259 (i64.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc'
260 )
261 (func (export "16u_good4") (param $i i32) (result i64)
262 (i64.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd'
263 )
264 (func (export "16u_good5") (param $i i32) (result i64)
265 (i64.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0'
266 )
267
268 (func (export "16s_good1") (param $i i32) (result i64)
269 (i64.load16_s offset=0 (local.get $i)) ;; 25185 'ab'
270 )
271 (func (export "16s_good2") (param $i i32) (result i64)
272 (i64.load16_s align=1 (local.get $i)) ;; 25185 'ab'
273 )
274 (func (export "16s_good3") (param $i i32) (result i64)
275 (i64.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc'
276 )
277 (func (export "16s_good4") (param $i i32) (result i64)
278 (i64.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd'
279 )
280 (func (export "16s_good5") (param $i i32) (result i64)
281 (i64.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0'
282 )
283
284 (func (export "32u_good1") (param $i i32) (result i64)
285 (i64.load32_u offset=0 (local.get $i)) ;; 1684234849 'abcd'
286 )
287 (func (export "32u_good2") (param $i i32) (result i64)
288 (i64.load32_u align=1 (local.get $i)) ;; 1684234849 'abcd'
289 )
290 (func (export "32u_good3") (param $i i32) (result i64)
291 (i64.load32_u offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde'
292 )
293 (func (export "32u_good4") (param $i i32) (result i64)
294 (i64.load32_u offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef'
295 )
296 (func (export "32u_good5") (param $i i32) (result i64)
297 (i64.load32_u offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0'
298 )
299
300 (func (export "32s_good1") (param $i i32) (result i64)
301 (i64.load32_s offset=0 (local.get $i)) ;; 1684234849 'abcd'
302 )
303 (func (export "32s_good2") (param $i i32) (result i64)
304 (i64.load32_s align=1 (local.get $i)) ;; 1684234849 'abcd'
305 )
306 (func (export "32s_good3") (param $i i32) (result i64)
307 (i64.load32_s offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde'
308 )
309 (func (export "32s_good4") (param $i i32) (result i64)
310 (i64.load32_s offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef'
311 )
312 (func (export "32s_good5") (param $i i32) (result i64)
313 (i64.load32_s offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0'
314 )
315
316 (func (export "64_good1") (param $i i32) (result i64)
317 (i64.load offset=0 (local.get $i)) ;; 0x6867666564636261 'abcdefgh'
318 )
319 (func (export "64_good2") (param $i i32) (result i64)
320 (i64.load align=1 (local.get $i)) ;; 0x6867666564636261 'abcdefgh'
321 )
322 (func (export "64_good3") (param $i i32) (result i64)
323 (i64.load offset=1 align=1 (local.get $i)) ;; 0x6968676665646362 'bcdefghi'
324 )
325 (func (export "64_good4") (param $i i32) (result i64)
326 (i64.load offset=2 align=2 (local.get $i)) ;; 0x6a69686766656463 'cdefghij'
327 )
328 (func (export "64_good5") (param $i i32) (result i64)
329 (i64.load offset=25 align=8 (local.get $i)) ;; 122 'z\0\0\0\0\0\0\0'
330 )
331
332 (func (export "8u_bad") (param $i i32)
333 (drop (i64.load8_u offset=4294967295 (local.get $i)))
334 )
335 (func (export "8s_bad") (param $i i32)
336 (drop (i64.load8_s offset=4294967295 (local.get $i)))
337 )
338 (func (export "16u_bad") (param $i i32)
339 (drop (i64.load16_u offset=4294967295 (local.get $i)))
340 )
341 (func (export "16s_bad") (param $i i32)
342 (drop (i64.load16_s offset=4294967295 (local.get $i)))
343 )
344 (func (export "32u_bad") (param $i i32)
345 (drop (i64.load32_u offset=4294967295 (local.get $i)))
346 )
347 (func (export "32s_bad") (param $i i32)
348 (drop (i64.load32_s offset=4294967295 (local.get $i)))
349 )
350 (func (export "64_bad") (param $i i32)
351 (drop (i64.load offset=4294967295 (local.get $i)))
352 )
353)
354
355(assert_return (invoke "8u_good1" (i32.const 0)) (i64.const 97))
356(assert_return (invoke "8u_good2" (i32.const 0)) (i64.const 97))
357(assert_return (invoke "8u_good3" (i32.const 0)) (i64.const 98))
358(assert_return (invoke "8u_good4" (i32.const 0)) (i64.const 99))
359(assert_return (invoke "8u_good5" (i32.const 0)) (i64.const 122))
360
361(assert_return (invoke "8s_good1" (i32.const 0)) (i64.const 97))
362(assert_return (invoke "8s_good2" (i32.const 0)) (i64.const 97))
363(assert_return (invoke "8s_good3" (i32.const 0)) (i64.const 98))
364(assert_return (invoke "8s_good4" (i32.const 0)) (i64.const 99))
365(assert_return (invoke "8s_good5" (i32.const 0)) (i64.const 122))
366
367(assert_return (invoke "16u_good1" (i32.const 0)) (i64.const 25185))
368(assert_return (invoke "16u_good2" (i32.const 0)) (i64.const 25185))
369(assert_return (invoke "16u_good3" (i32.const 0)) (i64.const 25442))
370(assert_return (invoke "16u_good4" (i32.const 0)) (i64.const 25699))
371(assert_return (invoke "16u_good5" (i32.const 0)) (i64.const 122))
372
373(assert_return (invoke "16s_good1" (i32.const 0)) (i64.const 25185))
374(assert_return (invoke "16s_good2" (i32.const 0)) (i64.const 25185))
375(assert_return (invoke "16s_good3" (i32.const 0)) (i64.const 25442))
376(assert_return (invoke "16s_good4" (i32.const 0)) (i64.const 25699))
377(assert_return (invoke "16s_good5" (i32.const 0)) (i64.const 122))
378
379(assert_return (invoke "32u_good1" (i32.const 0)) (i64.const 1684234849))
380(assert_return (invoke "32u_good2" (i32.const 0)) (i64.const 1684234849))
381(assert_return (invoke "32u_good3" (i32.const 0)) (i64.const 1701077858))
382(assert_return (invoke "32u_good4" (i32.const 0)) (i64.const 1717920867))
383(assert_return (invoke "32u_good5" (i32.const 0)) (i64.const 122))
384
385(assert_return (invoke "32s_good1" (i32.const 0)) (i64.const 1684234849))
386(assert_return (invoke "32s_good2" (i32.const 0)) (i64.const 1684234849))
387(assert_return (invoke "32s_good3" (i32.const 0)) (i64.const 1701077858))
388(assert_return (invoke "32s_good4" (i32.const 0)) (i64.const 1717920867))
389(assert_return (invoke "32s_good5" (i32.const 0)) (i64.const 122))
390
391(assert_return (invoke "64_good1" (i32.const 0)) (i64.const 0x6867666564636261))
392(assert_return (invoke "64_good2" (i32.const 0)) (i64.const 0x6867666564636261))
393(assert_return (invoke "64_good3" (i32.const 0)) (i64.const 0x6968676665646362))
394(assert_return (invoke "64_good4" (i32.const 0)) (i64.const 0x6a69686766656463))
395(assert_return (invoke "64_good5" (i32.const 0)) (i64.const 122))
396
397(assert_return (invoke "8u_good1" (i32.const 65503)) (i64.const 0))
398(assert_return (invoke "8u_good2" (i32.const 65503)) (i64.const 0))
399(assert_return (invoke "8u_good3" (i32.const 65503)) (i64.const 0))
400(assert_return (invoke "8u_good4" (i32.const 65503)) (i64.const 0))
401(assert_return (invoke "8u_good5" (i32.const 65503)) (i64.const 0))
402
403(assert_return (invoke "8s_good1" (i32.const 65503)) (i64.const 0))
404(assert_return (invoke "8s_good2" (i32.const 65503)) (i64.const 0))
405(assert_return (invoke "8s_good3" (i32.const 65503)) (i64.const 0))
406(assert_return (invoke "8s_good4" (i32.const 65503)) (i64.const 0))
407(assert_return (invoke "8s_good5" (i32.const 65503)) (i64.const 0))
408
409(assert_return (invoke "16u_good1" (i32.const 65503)) (i64.const 0))
410(assert_return (invoke "16u_good2" (i32.const 65503)) (i64.const 0))
411(assert_return (invoke "16u_good3" (i32.const 65503)) (i64.const 0))
412(assert_return (invoke "16u_good4" (i32.const 65503)) (i64.const 0))
413(assert_return (invoke "16u_good5" (i32.const 65503)) (i64.const 0))
414
415(assert_return (invoke "16s_good1" (i32.const 65503)) (i64.const 0))
416(assert_return (invoke "16s_good2" (i32.const 65503)) (i64.const 0))
417(assert_return (invoke "16s_good3" (i32.const 65503)) (i64.const 0))
418(assert_return (invoke "16s_good4" (i32.const 65503)) (i64.const 0))
419(assert_return (invoke "16s_good5" (i32.const 65503)) (i64.const 0))
420
421(assert_return (invoke "32u_good1" (i32.const 65503)) (i64.const 0))
422(assert_return (invoke "32u_good2" (i32.const 65503)) (i64.const 0))
423(assert_return (invoke "32u_good3" (i32.const 65503)) (i64.const 0))
424(assert_return (invoke "32u_good4" (i32.const 65503)) (i64.const 0))
425(assert_return (invoke "32u_good5" (i32.const 65503)) (i64.const 0))
426
427(assert_return (invoke "32s_good1" (i32.const 65503)) (i64.const 0))
428(assert_return (invoke "32s_good2" (i32.const 65503)) (i64.const 0))
429(assert_return (invoke "32s_good3" (i32.const 65503)) (i64.const 0))
430(assert_return (invoke "32s_good4" (i32.const 65503)) (i64.const 0))
431(assert_return (invoke "32s_good5" (i32.const 65503)) (i64.const 0))
432
433(assert_return (invoke "64_good1" (i32.const 65503)) (i64.const 0))
434(assert_return (invoke "64_good2" (i32.const 65503)) (i64.const 0))
435(assert_return (invoke "64_good3" (i32.const 65503)) (i64.const 0))
436(assert_return (invoke "64_good4" (i32.const 65503)) (i64.const 0))
437(assert_return (invoke "64_good5" (i32.const 65503)) (i64.const 0))
438
439(assert_return (invoke "8u_good1" (i32.const 65504)) (i64.const 0))
440(assert_return (invoke "8u_good2" (i32.const 65504)) (i64.const 0))
441(assert_return (invoke "8u_good3" (i32.const 65504)) (i64.const 0))
442(assert_return (invoke "8u_good4" (i32.const 65504)) (i64.const 0))
443(assert_return (invoke "8u_good5" (i32.const 65504)) (i64.const 0))
444
445(assert_return (invoke "8s_good1" (i32.const 65504)) (i64.const 0))
446(assert_return (invoke "8s_good2" (i32.const 65504)) (i64.const 0))
447(assert_return (invoke "8s_good3" (i32.const 65504)) (i64.const 0))
448(assert_return (invoke "8s_good4" (i32.const 65504)) (i64.const 0))
449(assert_return (invoke "8s_good5" (i32.const 65504)) (i64.const 0))
450
451(assert_return (invoke "16u_good1" (i32.const 65504)) (i64.const 0))
452(assert_return (invoke "16u_good2" (i32.const 65504)) (i64.const 0))
453(assert_return (invoke "16u_good3" (i32.const 65504)) (i64.const 0))
454(assert_return (invoke "16u_good4" (i32.const 65504)) (i64.const 0))
455(assert_return (invoke "16u_good5" (i32.const 65504)) (i64.const 0))
456
457(assert_return (invoke "16s_good1" (i32.const 65504)) (i64.const 0))
458(assert_return (invoke "16s_good2" (i32.const 65504)) (i64.const 0))
459(assert_return (invoke "16s_good3" (i32.const 65504)) (i64.const 0))
460(assert_return (invoke "16s_good4" (i32.const 65504)) (i64.const 0))
461(assert_return (invoke "16s_good5" (i32.const 65504)) (i64.const 0))
462
463(assert_return (invoke "32u_good1" (i32.const 65504)) (i64.const 0))
464(assert_return (invoke "32u_good2" (i32.const 65504)) (i64.const 0))
465(assert_return (invoke "32u_good3" (i32.const 65504)) (i64.const 0))
466(assert_return (invoke "32u_good4" (i32.const 65504)) (i64.const 0))
467(assert_return (invoke "32u_good5" (i32.const 65504)) (i64.const 0))
468
469(assert_return (invoke "32s_good1" (i32.const 65504)) (i64.const 0))
470(assert_return (invoke "32s_good2" (i32.const 65504)) (i64.const 0))
471(assert_return (invoke "32s_good3" (i32.const 65504)) (i64.const 0))
472(assert_return (invoke "32s_good4" (i32.const 65504)) (i64.const 0))
473(assert_return (invoke "32s_good5" (i32.const 65504)) (i64.const 0))
474
475(assert_return (invoke "64_good1" (i32.const 65504)) (i64.const 0))
476(assert_return (invoke "64_good2" (i32.const 65504)) (i64.const 0))
477(assert_return (invoke "64_good3" (i32.const 65504)) (i64.const 0))
478(assert_return (invoke "64_good4" (i32.const 65504)) (i64.const 0))
479(assert_trap (invoke "64_good5" (i32.const 65504)) "out of bounds memory access")
480
481(assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access")
482(assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access")
483(assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access")
484(assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access")
485(assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access")
486(assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access")
487(assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access")
488
489(assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access")
490(assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access")
491(assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access")
492(assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access")
493(assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access")
494(assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access")
495(assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access")
496
497;; Load f32 data with different offset/align arguments
498
499(module
500 (memory 1)
501 (data (i32.const 0) "\00\00\00\00\00\00\a0\7f\01\00\d0\7f")
502
503 (func (export "32_good1") (param $i i32) (result f32)
504 (f32.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00'
505 )
506 (func (export "32_good2") (param $i i32) (result f32)
507 (f32.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00'
508 )
509 (func (export "32_good3") (param $i i32) (result f32)
510 (f32.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00'
511 )
512 (func (export "32_good4") (param $i i32) (result f32)
513 (f32.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00'
514 )
515 (func (export "32_good5") (param $i i32) (result f32)
516 (f32.load offset=8 align=4 (local.get $i)) ;; nan:0x500001 '\01\00\d0\7f'
517 )
518 (func (export "32_bad") (param $i i32)
519 (drop (f32.load offset=4294967295 (local.get $i)))
520 )
521)
522
523(assert_return (invoke "32_good1" (i32.const 0)) (f32.const 0.0))
524(assert_return (invoke "32_good2" (i32.const 0)) (f32.const 0.0))
525(assert_return (invoke "32_good3" (i32.const 0)) (f32.const 0.0))
526(assert_return (invoke "32_good4" (i32.const 0)) (f32.const 0.0))
527(assert_return (invoke "32_good5" (i32.const 0)) (f32.const nan:0x500001))
528
529(assert_return (invoke "32_good1" (i32.const 65524)) (f32.const 0.0))
530(assert_return (invoke "32_good2" (i32.const 65524)) (f32.const 0.0))
531(assert_return (invoke "32_good3" (i32.const 65524)) (f32.const 0.0))
532(assert_return (invoke "32_good4" (i32.const 65524)) (f32.const 0.0))
533(assert_return (invoke "32_good5" (i32.const 65524)) (f32.const 0.0))
534
535(assert_return (invoke "32_good1" (i32.const 65525)) (f32.const 0.0))
536(assert_return (invoke "32_good2" (i32.const 65525)) (f32.const 0.0))
537(assert_return (invoke "32_good3" (i32.const 65525)) (f32.const 0.0))
538(assert_return (invoke "32_good4" (i32.const 65525)) (f32.const 0.0))
539(assert_trap (invoke "32_good5" (i32.const 65525)) "out of bounds memory access")
540
541(assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access")
542(assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access")
543
544;; Load f64 data with different offset/align arguments
545
546(module
547 (memory 1)
548 (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")
549
550 (func (export "64_good1") (param $i i32) (result f64)
551 (f64.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00'
552 )
553 (func (export "64_good2") (param $i i32) (result f64)
554 (f64.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00'
555 )
556 (func (export "64_good3") (param $i i32) (result f64)
557 (f64.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00'
558 )
559 (func (export "64_good4") (param $i i32) (result f64)
560 (f64.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00'
561 )
562 (func (export "64_good5") (param $i i32) (result f64)
563 (f64.load offset=18 align=8 (local.get $i)) ;; nan:0xc000000000001 '\01\00\00\00\00\00\fc\7f'
564 )
565 (func (export "64_bad") (param $i i32)
566 (drop (f64.load offset=4294967295 (local.get $i)))
567 )
568)
569
570(assert_return (invoke "64_good1" (i32.const 0)) (f64.const 0.0))
571(assert_return (invoke "64_good2" (i32.const 0)) (f64.const 0.0))
572(assert_return (invoke "64_good3" (i32.const 0)) (f64.const 0.0))
573(assert_return (invoke "64_good4" (i32.const 0)) (f64.const 0.0))
574(assert_return (invoke "64_good5" (i32.const 0)) (f64.const nan:0xc000000000001))
575
576(assert_return (invoke "64_good1" (i32.const 65510)) (f64.const 0.0))
577(assert_return (invoke "64_good2" (i32.const 65510)) (f64.const 0.0))
578(assert_return (invoke "64_good3" (i32.const 65510)) (f64.const 0.0))
579(assert_return (invoke "64_good4" (i32.const 65510)) (f64.const 0.0))
580(assert_return (invoke "64_good5" (i32.const 65510)) (f64.const 0.0))
581
582(assert_return (invoke "64_good1" (i32.const 65511)) (f64.const 0.0))
583(assert_return (invoke "64_good2" (i32.const 65511)) (f64.const 0.0))
584(assert_return (invoke "64_good3" (i32.const 65511)) (f64.const 0.0))
585(assert_return (invoke "64_good4" (i32.const 65511)) (f64.const 0.0))
586(assert_trap (invoke "64_good5" (i32.const 65511)) "out of bounds memory access")
587
588(assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access")
589(assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access")
View as plain text