...
1;; Test `loop` opcode
2
3(module
4 (memory 1)
5
6 (func $dummy)
7
8 (func (export "empty")
9 (loop)
10 (loop $l)
11 )
12
13 (func (export "singular") (result i32)
14 (loop (nop))
15 (loop (result i32) (i32.const 7))
16 )
17
18 (func (export "multi") (result i32)
19 (loop (call $dummy) (call $dummy) (call $dummy) (call $dummy))
20 (loop (result i32) (call $dummy) (call $dummy) (i32.const 8) (call $dummy))
21 (drop)
22 (loop (result i32 i64 i32)
23 (call $dummy) (call $dummy) (call $dummy) (i32.const 8) (call $dummy)
24 (call $dummy) (call $dummy) (call $dummy) (i64.const 7) (call $dummy)
25 (call $dummy) (call $dummy) (call $dummy) (i32.const 9) (call $dummy)
26 )
27 (drop) (drop)
28 )
29
30 (func (export "nested") (result i32)
31 (loop (result i32)
32 (loop (call $dummy) (block) (nop))
33 (loop (result i32) (call $dummy) (i32.const 9))
34 )
35 )
36
37 (func (export "deep") (result i32)
38 (loop (result i32) (block (result i32)
39 (loop (result i32) (block (result i32)
40 (loop (result i32) (block (result i32)
41 (loop (result i32) (block (result i32)
42 (loop (result i32) (block (result i32)
43 (loop (result i32) (block (result i32)
44 (loop (result i32) (block (result i32)
45 (loop (result i32) (block (result i32)
46 (loop (result i32) (block (result i32)
47 (loop (result i32) (block (result i32)
48 (loop (result i32) (block (result i32)
49 (loop (result i32) (block (result i32)
50 (loop (result i32) (block (result i32)
51 (loop (result i32) (block (result i32)
52 (loop (result i32) (block (result i32)
53 (loop (result i32) (block (result i32)
54 (loop (result i32) (block (result i32)
55 (loop (result i32) (block (result i32)
56 (loop (result i32) (block (result i32)
57 (loop (result i32) (block (result i32)
58 (call $dummy) (i32.const 150)
59 ))
60 ))
61 ))
62 ))
63 ))
64 ))
65 ))
66 ))
67 ))
68 ))
69 ))
70 ))
71 ))
72 ))
73 ))
74 ))
75 ))
76 ))
77 ))
78 ))
79 )
80
81 (func (export "as-select-first") (result i32)
82 (select (loop (result i32) (i32.const 1)) (i32.const 2) (i32.const 3))
83 )
84 (func (export "as-select-mid") (result i32)
85 (select (i32.const 2) (loop (result i32) (i32.const 1)) (i32.const 3))
86 )
87 (func (export "as-select-last") (result i32)
88 (select (i32.const 2) (i32.const 3) (loop (result i32) (i32.const 1)))
89 )
90
91 (func (export "as-if-condition")
92 (loop (result i32) (i32.const 1)) (if (then (call $dummy)))
93 )
94 (func (export "as-if-then") (result i32)
95 (if (result i32) (i32.const 1) (then (loop (result i32) (i32.const 1))) (else (i32.const 2)))
96 )
97 (func (export "as-if-else") (result i32)
98 (if (result i32) (i32.const 1) (then (i32.const 2)) (else (loop (result i32) (i32.const 1))))
99 )
100
101 (func (export "as-br_if-first") (result i32)
102 (block (result i32) (br_if 0 (loop (result i32) (i32.const 1)) (i32.const 2)))
103 )
104 (func (export "as-br_if-last") (result i32)
105 (block (result i32) (br_if 0 (i32.const 2) (loop (result i32) (i32.const 1))))
106 )
107
108 (func (export "as-br_table-first") (result i32)
109 (block (result i32) (loop (result i32) (i32.const 1)) (i32.const 2) (br_table 0 0))
110 )
111 (func (export "as-br_table-last") (result i32)
112 (block (result i32) (i32.const 2) (loop (result i32) (i32.const 1)) (br_table 0 0))
113 )
114
115 (func $func (param i32 i32) (result i32) (local.get 0))
116 (type $check (func (param i32 i32) (result i32)))
117 (table funcref (elem $func))
118 (func (export "as-call_indirect-first") (result i32)
119 (block (result i32)
120 (call_indirect (type $check)
121 (loop (result i32) (i32.const 1)) (i32.const 2) (i32.const 0)
122 )
123 )
124 )
125 (func (export "as-call_indirect-mid") (result i32)
126 (block (result i32)
127 (call_indirect (type $check)
128 (i32.const 2) (loop (result i32) (i32.const 1)) (i32.const 0)
129 )
130 )
131 )
132 (func (export "as-call_indirect-last") (result i32)
133 (block (result i32)
134 (call_indirect (type $check)
135 (i32.const 1) (i32.const 2) (loop (result i32) (i32.const 0))
136 )
137 )
138 )
139
140 (func (export "as-store-first")
141 (loop (result i32) (i32.const 1)) (i32.const 1) (i32.store)
142 )
143 (func (export "as-store-last")
144 (i32.const 10) (loop (result i32) (i32.const 1)) (i32.store)
145 )
146
147 (func (export "as-memory.grow-value") (result i32)
148 (memory.grow (loop (result i32) (i32.const 1)))
149 )
150
151 (func $f (param i32) (result i32) (local.get 0))
152
153 (func (export "as-call-value") (result i32)
154 (call $f (loop (result i32) (i32.const 1)))
155 )
156 (func (export "as-return-value") (result i32)
157 (loop (result i32) (i32.const 1)) (return)
158 )
159 (func (export "as-drop-operand")
160 (drop (loop (result i32) (i32.const 1)))
161 )
162 (func (export "as-br-value") (result i32)
163 (block (result i32) (br 0 (loop (result i32) (i32.const 1))))
164 )
165 (func (export "as-local.set-value") (result i32)
166 (local i32) (local.set 0 (loop (result i32) (i32.const 1))) (local.get 0)
167 )
168 (func (export "as-local.tee-value") (result i32)
169 (local i32) (local.tee 0 (loop (result i32) (i32.const 1)))
170 )
171 (global $a (mut i32) (i32.const 0))
172 (func (export "as-global.set-value") (result i32)
173 (global.set $a (loop (result i32) (i32.const 1)))
174 (global.get $a)
175 )
176 (func (export "as-load-operand") (result i32)
177 (i32.load (loop (result i32) (i32.const 1)))
178 )
179
180 (func (export "as-unary-operand") (result i32)
181 (i32.ctz (loop (result i32) (call $dummy) (i32.const 13)))
182 )
183 (func (export "as-binary-operand") (result i32)
184 (i32.mul
185 (loop (result i32) (call $dummy) (i32.const 3))
186 (loop (result i32) (call $dummy) (i32.const 4))
187 )
188 )
189 (func (export "as-test-operand") (result i32)
190 (i32.eqz (loop (result i32) (call $dummy) (i32.const 13)))
191 )
192 (func (export "as-compare-operand") (result i32)
193 (f32.gt
194 (loop (result f32) (call $dummy) (f32.const 3))
195 (loop (result f32) (call $dummy) (f32.const 3))
196 )
197 )
198 (func (export "as-binary-operands") (result i32)
199 (i32.mul
200 (loop (result i32 i32)
201 (call $dummy) (i32.const 3) (call $dummy) (i32.const 4)
202 )
203 )
204 )
205 (func (export "as-compare-operands") (result i32)
206 (f32.gt
207 (loop (result f32 f32)
208 (call $dummy) (f32.const 3) (call $dummy) (f32.const 3)
209 )
210 )
211 )
212 (func (export "as-mixed-operands") (result i32)
213 (loop (result i32 i32)
214 (call $dummy) (i32.const 3) (call $dummy) (i32.const 4)
215 )
216 (i32.const 5)
217 (i32.add)
218 (i32.mul)
219 )
220
221 (func (export "break-bare") (result i32)
222 (block (loop (br 1) (br 0) (unreachable)))
223 (block (loop (br_if 1 (i32.const 1)) (unreachable)))
224 (block (loop (br_table 1 (i32.const 0)) (unreachable)))
225 (block (loop (br_table 1 1 1 (i32.const 1)) (unreachable)))
226 (i32.const 19)
227 )
228 (func (export "break-value") (result i32)
229 (block (result i32)
230 (i32.const 0)
231 (loop (param i32)
232 (block (br 2 (i32.const 18)))
233 (br 0 (i32.const 20))
234 )
235 (i32.const 19)
236 )
237 )
238 (func (export "break-multi-value") (result i32 i32 i64)
239 (block (result i32 i32 i64)
240 (i32.const 0) (i32.const 0) (i64.const 0)
241 (loop (param i32 i32 i64)
242 (block (br 2 (i32.const 18) (i32.const -18) (i64.const 18)))
243 (br 0 (i32.const 20) (i32.const -20) (i64.const 20))
244 )
245 (i32.const 19) (i32.const -19) (i64.const 19)
246 )
247 )
248 (func (export "break-repeated") (result i32)
249 (block (result i32)
250 (loop (result i32)
251 (br 1 (i32.const 18))
252 (br 1 (i32.const 19))
253 (drop (br_if 1 (i32.const 20) (i32.const 0)))
254 (drop (br_if 1 (i32.const 20) (i32.const 1)))
255 (br 1 (i32.const 21))
256 (br_table 1 (i32.const 22) (i32.const 0))
257 (br_table 1 1 1 (i32.const 23) (i32.const 1))
258 (i32.const 21)
259 )
260 )
261 )
262 (func (export "break-inner") (result i32)
263 (local i32)
264 (local.set 0 (i32.const 0))
265 (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (block (result i32) (br 2 (i32.const 0x1)))))))
266 (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (loop (result i32) (br 2 (i32.const 0x2)))))))
267 (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))))))))
268 (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (i32.ctz (br 1 (i32.const 0x8)))))))
269 (local.set 0 (i32.add (local.get 0) (block (result i32) (loop (result i32) (i32.ctz (loop (result i32) (br 2 (i32.const 0x10))))))))
270 (local.get 0)
271 )
272 (func (export "cont-inner") (result i32)
273 (local i32)
274 (local.set 0 (i32.const 0))
275 (local.set 0 (i32.add (local.get 0) (loop (result i32) (loop (result i32) (br 1)))))
276 (local.set 0 (i32.add (local.get 0) (loop (result i32) (i32.ctz (br 0)))))
277 (local.set 0 (i32.add (local.get 0) (loop (result i32) (i32.ctz (loop (result i32) (br 1))))))
278 (local.get 0)
279 )
280
281 (func (export "param") (result i32)
282 (i32.const 1)
283 (loop (param i32) (result i32)
284 (i32.const 2)
285 (i32.add)
286 )
287 )
288 (func (export "params") (result i32)
289 (i32.const 1)
290 (i32.const 2)
291 (loop (param i32 i32) (result i32)
292 (i32.add)
293 )
294 )
295 (func (export "params-id") (result i32)
296 (i32.const 1)
297 (i32.const 2)
298 (loop (param i32 i32) (result i32 i32))
299 (i32.add)
300 )
301 (func (export "param-break") (result i32)
302 (local $x i32)
303 (i32.const 1)
304 (loop (param i32) (result i32)
305 (i32.const 4)
306 (i32.add)
307 (local.tee $x)
308 (local.get $x)
309 (i32.const 10)
310 (i32.lt_u)
311 (br_if 0)
312 )
313 )
314 (func (export "params-break") (result i32)
315 (local $x i32)
316 (i32.const 1)
317 (i32.const 2)
318 (loop (param i32 i32) (result i32)
319 (i32.add)
320 (local.tee $x)
321 (i32.const 3)
322 (local.get $x)
323 (i32.const 10)
324 (i32.lt_u)
325 (br_if 0)
326 (drop)
327 )
328 )
329 (func (export "params-id-break") (result i32)
330 (local $x i32)
331 (local.set $x (i32.const 0))
332 (i32.const 1)
333 (i32.const 2)
334 (loop (param i32 i32) (result i32 i32)
335 (local.set $x (i32.add (local.get $x) (i32.const 1)))
336 (br_if 0 (i32.lt_u (local.get $x) (i32.const 10)))
337 )
338 (i32.add)
339 )
340
341 (func $fx (export "effects") (result i32)
342 (local i32)
343 (block
344 (loop
345 (local.set 0 (i32.const 1))
346 (local.set 0 (i32.mul (local.get 0) (i32.const 3)))
347 (local.set 0 (i32.sub (local.get 0) (i32.const 5)))
348 (local.set 0 (i32.mul (local.get 0) (i32.const 7)))
349 (br 1)
350 (local.set 0 (i32.mul (local.get 0) (i32.const 100)))
351 )
352 )
353 (i32.eq (local.get 0) (i32.const -14))
354 )
355
356 (func (export "while") (param i64) (result i64)
357 (local i64)
358 (local.set 1 (i64.const 1))
359 (block
360 (loop
361 (br_if 1 (i64.eqz (local.get 0)))
362 (local.set 1 (i64.mul (local.get 0) (local.get 1)))
363 (local.set 0 (i64.sub (local.get 0) (i64.const 1)))
364 (br 0)
365 )
366 )
367 (local.get 1)
368 )
369
370 (func (export "for") (param i64) (result i64)
371 (local i64 i64)
372 (local.set 1 (i64.const 1))
373 (local.set 2 (i64.const 2))
374 (block
375 (loop
376 (br_if 1 (i64.gt_u (local.get 2) (local.get 0)))
377 (local.set 1 (i64.mul (local.get 1) (local.get 2)))
378 (local.set 2 (i64.add (local.get 2) (i64.const 1)))
379 (br 0)
380 )
381 )
382 (local.get 1)
383 )
384
385 (func (export "nesting") (param f32 f32) (result f32)
386 (local f32 f32)
387 (block
388 (loop
389 (br_if 1 (f32.eq (local.get 0) (f32.const 0)))
390 (local.set 2 (local.get 1))
391 (block
392 (loop
393 (br_if 1 (f32.eq (local.get 2) (f32.const 0)))
394 (br_if 3 (f32.lt (local.get 2) (f32.const 0)))
395 (local.set 3 (f32.add (local.get 3) (local.get 2)))
396 (local.set 2 (f32.sub (local.get 2) (f32.const 2)))
397 (br 0)
398 )
399 )
400 (local.set 3 (f32.div (local.get 3) (local.get 0)))
401 (local.set 0 (f32.sub (local.get 0) (f32.const 1)))
402 (br 0)
403 )
404 )
405 (local.get 3)
406 )
407
408 (type $block-sig-1 (func))
409 (type $block-sig-2 (func (result i32)))
410 (type $block-sig-3 (func (param $x i32)))
411 (type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32)))
412
413 (func (export "type-use")
414 (loop (type $block-sig-1))
415 (loop (type $block-sig-2) (i32.const 0))
416 (loop (type $block-sig-3) (drop))
417 (i32.const 0) (f64.const 0) (i32.const 0)
418 (loop (type $block-sig-4))
419 (drop) (drop) (drop)
420 (loop (type $block-sig-2) (result i32) (i32.const 0))
421 (loop (type $block-sig-3) (param i32) (drop))
422 (i32.const 0) (f64.const 0) (i32.const 0)
423 (loop (type $block-sig-4)
424 (param i32) (param f64 i32) (result i32 f64) (result i32)
425 )
426 (drop) (drop) (drop)
427 )
428)
429
430(assert_return (invoke "empty"))
431(assert_return (invoke "singular") (i32.const 7))
432(assert_return (invoke "multi") (i32.const 8))
433(assert_return (invoke "nested") (i32.const 9))
434(assert_return (invoke "deep") (i32.const 150))
435
436(assert_return (invoke "as-select-first") (i32.const 1))
437(assert_return (invoke "as-select-mid") (i32.const 2))
438(assert_return (invoke "as-select-last") (i32.const 2))
439
440(assert_return (invoke "as-if-condition"))
441(assert_return (invoke "as-if-then") (i32.const 1))
442(assert_return (invoke "as-if-else") (i32.const 2))
443
444(assert_return (invoke "as-br_if-first") (i32.const 1))
445(assert_return (invoke "as-br_if-last") (i32.const 2))
446
447(assert_return (invoke "as-br_table-first") (i32.const 1))
448(assert_return (invoke "as-br_table-last") (i32.const 2))
449
450(assert_return (invoke "as-call_indirect-first") (i32.const 1))
451(assert_return (invoke "as-call_indirect-mid") (i32.const 2))
452(assert_return (invoke "as-call_indirect-last") (i32.const 1))
453
454(assert_return (invoke "as-store-first"))
455(assert_return (invoke "as-store-last"))
456
457(assert_return (invoke "as-memory.grow-value") (i32.const 1))
458(assert_return (invoke "as-call-value") (i32.const 1))
459(assert_return (invoke "as-return-value") (i32.const 1))
460(assert_return (invoke "as-drop-operand"))
461(assert_return (invoke "as-br-value") (i32.const 1))
462(assert_return (invoke "as-local.set-value") (i32.const 1))
463(assert_return (invoke "as-local.tee-value") (i32.const 1))
464(assert_return (invoke "as-global.set-value") (i32.const 1))
465(assert_return (invoke "as-load-operand") (i32.const 1))
466
467(assert_return (invoke "as-unary-operand") (i32.const 0))
468(assert_return (invoke "as-binary-operand") (i32.const 12))
469(assert_return (invoke "as-test-operand") (i32.const 0))
470(assert_return (invoke "as-compare-operand") (i32.const 0))
471(assert_return (invoke "as-binary-operands") (i32.const 12))
472(assert_return (invoke "as-compare-operands") (i32.const 0))
473(assert_return (invoke "as-mixed-operands") (i32.const 27))
474
475(assert_return (invoke "break-bare") (i32.const 19))
476(assert_return (invoke "break-value") (i32.const 18))
477(assert_return (invoke "break-multi-value")
478 (i32.const 18) (i32.const -18) (i64.const 18)
479)
480(assert_return (invoke "break-repeated") (i32.const 18))
481(assert_return (invoke "break-inner") (i32.const 0x1f))
482
483(assert_return (invoke "param") (i32.const 3))
484(assert_return (invoke "params") (i32.const 3))
485(assert_return (invoke "params-id") (i32.const 3))
486(assert_return (invoke "param-break") (i32.const 13))
487(assert_return (invoke "params-break") (i32.const 12))
488(assert_return (invoke "params-id-break") (i32.const 3))
489
490(assert_return (invoke "effects") (i32.const 1))
491
492(assert_return (invoke "while" (i64.const 0)) (i64.const 1))
493(assert_return (invoke "while" (i64.const 1)) (i64.const 1))
494(assert_return (invoke "while" (i64.const 2)) (i64.const 2))
495(assert_return (invoke "while" (i64.const 3)) (i64.const 6))
496(assert_return (invoke "while" (i64.const 5)) (i64.const 120))
497(assert_return (invoke "while" (i64.const 20)) (i64.const 2432902008176640000))
498
499(assert_return (invoke "for" (i64.const 0)) (i64.const 1))
500(assert_return (invoke "for" (i64.const 1)) (i64.const 1))
501(assert_return (invoke "for" (i64.const 2)) (i64.const 2))
502(assert_return (invoke "for" (i64.const 3)) (i64.const 6))
503(assert_return (invoke "for" (i64.const 5)) (i64.const 120))
504(assert_return (invoke "for" (i64.const 20)) (i64.const 2432902008176640000))
505
506(assert_return (invoke "nesting" (f32.const 0) (f32.const 7)) (f32.const 0))
507(assert_return (invoke "nesting" (f32.const 7) (f32.const 0)) (f32.const 0))
508(assert_return (invoke "nesting" (f32.const 1) (f32.const 1)) (f32.const 1))
509(assert_return (invoke "nesting" (f32.const 1) (f32.const 2)) (f32.const 2))
510(assert_return (invoke "nesting" (f32.const 1) (f32.const 3)) (f32.const 4))
511(assert_return (invoke "nesting" (f32.const 1) (f32.const 4)) (f32.const 6))
512(assert_return (invoke "nesting" (f32.const 1) (f32.const 100)) (f32.const 2550))
513(assert_return (invoke "nesting" (f32.const 1) (f32.const 101)) (f32.const 2601))
514(assert_return (invoke "nesting" (f32.const 2) (f32.const 1)) (f32.const 1))
515(assert_return (invoke "nesting" (f32.const 3) (f32.const 1)) (f32.const 1))
516(assert_return (invoke "nesting" (f32.const 10) (f32.const 1)) (f32.const 1))
517(assert_return (invoke "nesting" (f32.const 2) (f32.const 2)) (f32.const 3))
518(assert_return (invoke "nesting" (f32.const 2) (f32.const 3)) (f32.const 4))
519(assert_return (invoke "nesting" (f32.const 7) (f32.const 4)) (f32.const 10.3095235825))
520(assert_return (invoke "nesting" (f32.const 7) (f32.const 100)) (f32.const 4381.54785156))
521(assert_return (invoke "nesting" (f32.const 7) (f32.const 101)) (f32.const 2601))
522
523(assert_return (invoke "type-use"))
524
525(assert_malformed
526 (module quote
527 "(type $sig (func (param i32) (result i32)))"
528 "(func (i32.const 0) (loop (type $sig) (result i32) (param i32)))"
529 )
530 "unexpected token"
531)
532(assert_malformed
533 (module quote
534 "(type $sig (func (param i32) (result i32)))"
535 "(func (i32.const 0) (loop (param i32) (type $sig) (result i32)))"
536 )
537 "unexpected token"
538)
539(assert_malformed
540 (module quote
541 "(type $sig (func (param i32) (result i32)))"
542 "(func (i32.const 0) (loop (param i32) (result i32) (type $sig)))"
543 )
544 "unexpected token"
545)
546(assert_malformed
547 (module quote
548 "(type $sig (func (param i32) (result i32)))"
549 "(func (i32.const 0) (loop (result i32) (type $sig) (param i32)))"
550 )
551 "unexpected token"
552)
553(assert_malformed
554 (module quote
555 "(type $sig (func (param i32) (result i32)))"
556 "(func (i32.const 0) (loop (result i32) (param i32) (type $sig)))"
557 )
558 "unexpected token"
559)
560(assert_malformed
561 (module quote
562 "(func (i32.const 0) (loop (result i32) (param i32)))"
563 )
564 "unexpected token"
565)
566
567(assert_malformed
568 (module quote "(func (i32.const 0) (loop (param $x i32) (drop)))")
569 "unexpected token"
570)
571(assert_malformed
572 (module quote
573 "(type $sig (func))"
574 "(func (loop (type $sig) (result i32) (i32.const 0)) (unreachable))"
575 )
576 "inline function type"
577)
578(assert_malformed
579 (module quote
580 "(type $sig (func (param i32) (result i32)))"
581 "(func (loop (type $sig) (result i32) (i32.const 0)) (unreachable))"
582 )
583 "inline function type"
584)
585(assert_malformed
586 (module quote
587 "(type $sig (func (param i32) (result i32)))"
588 "(func (i32.const 0) (loop (type $sig) (param i32) (drop)) (unreachable))"
589 )
590 "inline function type"
591)
592(assert_malformed
593 (module quote
594 "(type $sig (func (param i32 i32) (result i32)))"
595 "(func (i32.const 0) (loop (type $sig) (param i32) (result i32)) (unreachable))"
596 )
597 "inline function type"
598)
599
600(assert_invalid
601 (module
602 (type $sig (func))
603 (func (loop (type $sig) (i32.const 0)))
604 )
605 "type mismatch"
606)
607
608(assert_invalid
609 (module (func $type-empty-i32 (result i32) (loop)))
610 "type mismatch"
611)
612(assert_invalid
613 (module (func $type-empty-i64 (result i64) (loop)))
614 "type mismatch"
615)
616(assert_invalid
617 (module (func $type-empty-f32 (result f32) (loop)))
618 "type mismatch"
619)
620(assert_invalid
621 (module (func $type-empty-f64 (result f64) (loop)))
622 "type mismatch"
623)
624
625(assert_invalid
626 (module (func $type-value-num-vs-void
627 (loop (i32.const 1))
628 ))
629 "type mismatch"
630)
631(assert_invalid
632 (module (func $type-value-nums-vs-void
633 (loop (i32.const 1) (i32.const 2))
634 ))
635 "type mismatch"
636)
637(assert_invalid
638 (module (func $type-value-empty-vs-num (result i32)
639 (loop (result i32))
640 ))
641 "type mismatch"
642)
643(assert_invalid
644 (module (func $type-value-empty-vs-nums (result i32 i32)
645 (loop (result i32 i32))
646 ))
647 "type mismatch"
648)
649(assert_invalid
650 (module (func $type-value-void-vs-num (result i32)
651 (loop (result i32) (nop))
652 ))
653 "type mismatch"
654)
655(assert_invalid
656 (module (func $type-value-void-vs-nums (result i32 i32)
657 (loop (result i32 i32) (nop))
658 ))
659 "type mismatch"
660)
661(assert_invalid
662 (module (func $type-value-num-vs-num (result i32)
663 (loop (result i32) (f32.const 0))
664 ))
665 "type mismatch"
666)
667(assert_invalid
668 (module (func $type-value-num-vs-nums (result i32 i32)
669 (loop (result i32 i32) (i32.const 0))
670 ))
671 "type mismatch"
672)
673(assert_invalid
674 (module (func $type-value-partial-vs-nums (result i32 i32)
675 (i32.const 1) (loop (result i32 i32) (i32.const 2))
676 ))
677 "type mismatch"
678)
679(assert_invalid
680 (module (func $type-value-nums-vs-num (result i32)
681 (loop (result i32) (i32.const 1) (i32.const 2))
682 ))
683 "type mismatch"
684)
685(assert_invalid
686 (module (func $type-value-unreached-select (result i32)
687 (loop (result i64) (select (unreachable) (unreachable) (unreachable)))
688 ))
689 "type mismatch"
690)
691
692(assert_invalid
693 (module
694 (func $type-value-empty-in-block
695 (i32.const 0)
696 (block (loop (result i32)) (drop))
697 )
698 )
699 "type mismatch"
700)
701(assert_invalid
702 (module
703 (func $type-value-empty-in-loop
704 (i32.const 0)
705 (loop (loop (result i32)) (drop))
706 )
707 )
708 "type mismatch"
709)
710(assert_invalid
711 (module
712 (func $type-value-empty-in-then
713 (i32.const 0) (i32.const 0)
714 (if (then (loop (result i32)) (drop)))
715 )
716 )
717 "type mismatch"
718)
719
720(assert_invalid
721 (module (func $type-param-void-vs-num
722 (loop (param i32) (drop))
723 ))
724 "type mismatch"
725)
726(assert_invalid
727 (module (func $type-param-void-vs-nums
728 (loop (param i32 f64) (drop) (drop))
729 ))
730 "type mismatch"
731)
732(assert_invalid
733 (module (func $type-param-num-vs-num
734 (f32.const 0) (loop (param i32) (drop))
735 ))
736 "type mismatch"
737)
738(assert_invalid
739 (module (func $type-param-num-vs-nums
740 (f32.const 0) (loop (param f32 i32) (drop) (drop))
741 ))
742 "type mismatch"
743)
744(assert_invalid
745 (module (func $type-param-nested-void-vs-num
746 (block (loop (param i32) (drop)))
747 ))
748 "type mismatch"
749)
750(assert_invalid
751 (module (func $type-param-void-vs-nums
752 (block (loop (param i32 f64) (drop) (drop)))
753 ))
754 "type mismatch"
755)
756(assert_invalid
757 (module (func $type-param-num-vs-num
758 (block (f32.const 0) (loop (param i32) (drop)))
759 ))
760 "type mismatch"
761)
762(assert_invalid
763 (module (func $type-param-num-vs-nums
764 (block (f32.const 0) (loop (param f32 i32) (drop) (drop)))
765 ))
766 "type mismatch"
767)
768
769(assert_malformed
770 (module quote "(func (param i32) (result i32) loop (param $x i32) end)")
771 "unexpected token"
772)
773(assert_malformed
774 (module quote "(func (param i32) (result i32) (loop (param $x i32)))")
775 "unexpected token"
776)
777
778(assert_malformed
779 (module quote "(func loop end $l)")
780 "mismatching label"
781)
782(assert_malformed
783 (module quote "(func loop $a end $l)")
784 "mismatching label"
785)
View as plain text