fde267fab2b2773aed83627a1205af76fb5d3780
[platform/framework/web/lwnode.git] /
1 (module
2   ;; Auxiliary
3   (func $dummy)
4   (table $tab funcref (elem $dummy))
5   (memory 1)
6
7   (func (export "select-i32") (param i32 i32 i32) (result i32)
8     (select (local.get 0) (local.get 1) (local.get 2))
9   )
10   (func (export "select-i64") (param i64 i64 i32) (result i64)
11     (select (local.get 0) (local.get 1) (local.get 2))
12   )
13   (func (export "select-f32") (param f32 f32 i32) (result f32)
14     (select (local.get 0) (local.get 1) (local.get 2))
15   )
16   (func (export "select-f64") (param f64 f64 i32) (result f64)
17     (select (local.get 0) (local.get 1) (local.get 2))
18   )
19
20   (func (export "select-i32-t") (param i32 i32 i32) (result i32)
21     (select (result i32) (local.get 0) (local.get 1) (local.get 2))
22   )
23   (func (export "select-i64-t") (param i64 i64 i32) (result i64)
24     (select (result i64) (local.get 0) (local.get 1) (local.get 2))
25   )
26   (func (export "select-f32-t") (param f32 f32 i32) (result f32)
27     (select (result f32) (local.get 0) (local.get 1) (local.get 2))
28   )
29   (func (export "select-f64-t") (param f64 f64 i32) (result f64)
30     (select (result f64) (local.get 0) (local.get 1) (local.get 2))
31   )
32   (func (export "select-funcref") (param funcref funcref i32) (result funcref)
33     (select (result funcref) (local.get 0) (local.get 1) (local.get 2))
34   )
35   (func (export "select-externref") (param externref externref i32) (result externref)
36     (select (result externref) (local.get 0) (local.get 1) (local.get 2))
37   )
38
39   (type $t (func))
40   (func $tf) (elem declare func $tf)
41   (func (export "join-funcnull") (param i32) (result (ref null func))
42     (select (result (ref null func))
43       (ref.func $tf)
44       (ref.null func)
45       (local.get 0)
46     )
47   )
48
49   ;; Check that both sides of the select are evaluated
50   (func (export "select-trap-left") (param $cond i32) (result i32)
51     (select (unreachable) (i32.const 0) (local.get $cond))
52   )
53   (func (export "select-trap-right") (param $cond i32) (result i32)
54     (select (i32.const 0) (unreachable) (local.get $cond))
55   )
56
57   (func (export "select-unreached")
58     (unreachable) (select)
59     (unreachable) (i32.const 0) (select)
60     (unreachable) (i32.const 0) (i32.const 0) (select)
61     (unreachable) (f32.const 0) (i32.const 0) (select)
62     (unreachable)
63   )
64
65
66   ;; As the argument of control constructs and instructions
67
68   (func (export "as-select-first") (param i32) (result i32)
69     (select (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 2) (i32.const 3))
70   )
71   (func (export "as-select-mid") (param i32) (result i32)
72     (select (i32.const 2) (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 3))
73   )
74   (func (export "as-select-last") (param i32) (result i32)
75     (select (i32.const 2) (i32.const 3) (select (i32.const 0) (i32.const 1) (local.get 0)))
76   )
77
78   (func (export "as-loop-first") (param i32) (result i32)
79     (loop (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy) (call $dummy))
80   )
81   (func (export "as-loop-mid") (param i32) (result i32)
82     (loop (result i32) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy))
83   )
84   (func (export "as-loop-last") (param i32) (result i32)
85     (loop (result i32) (call $dummy) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)))
86   )
87
88   (func (export "as-if-condition") (param i32)
89     (select (i32.const 2) (i32.const 3) (local.get 0)) (if (then (call $dummy)))
90   )
91   (func (export "as-if-then") (param i32) (result i32)
92     (if (result i32) (i32.const 1) (then (select (i32.const 2) (i32.const 3) (local.get 0))) (else (i32.const 4)))
93   )
94   (func (export "as-if-else") (param i32) (result i32)
95     (if (result i32) (i32.const 0) (then (i32.const 2)) (else (select (i32.const 2) (i32.const 3) (local.get 0))))
96   )
97
98   (func (export "as-br_if-first") (param i32) (result i32)
99     (block (result i32) (br_if 0 (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 4)))
100   )
101   (func (export "as-br_if-last") (param i32) (result i32)
102     (block (result i32) (br_if 0 (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0))))
103   )
104
105   (func (export "as-br_table-first") (param i32) (result i32)
106     (block (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 2) (br_table 0 0))
107   )
108   (func (export "as-br_table-last") (param i32) (result i32)
109     (block (result i32) (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)) (br_table 0 0))
110   )
111
112   (func $func (param i32 i32) (result i32) (local.get 0))
113   (type $check (func (param i32 i32) (result i32)))
114   (table $t funcref (elem $func))
115   (func (export "as-call_indirect-first") (param i32) (result i32)
116     (block (result i32)
117       (call_indirect $t (type $check)
118         (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 1) (i32.const 0)
119       )
120     )
121   )
122   (func (export "as-call_indirect-mid") (param i32) (result i32)
123     (block (result i32)
124       (call_indirect $t (type $check)
125         (i32.const 1) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 0)
126       )
127     )
128   )
129   (func (export "as-call_indirect-last") (param i32) (result i32)
130     (block (result i32)
131       (call_indirect $t (type $check)
132         (i32.const 1) (i32.const 4) (select (i32.const 2) (i32.const 3) (local.get 0))
133       )
134     )
135   )
136
137   (func (export "as-store-first") (param i32)
138     (select (i32.const 0) (i32.const 4) (local.get 0)) (i32.const 1) (i32.store)
139   )
140   (func (export "as-store-last") (param i32)
141     (i32.const 8) (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.store)
142   )
143
144   (func (export "as-memory.grow-value") (param i32) (result i32)
145     (memory.grow (select (i32.const 1) (i32.const 2) (local.get 0)))
146   )
147
148   (func $f (param i32) (result i32) (local.get 0))
149
150   (func (export "as-call-value") (param i32) (result i32)
151     (call $f (select (i32.const 1) (i32.const 2) (local.get 0)))
152   )
153   (func (export "as-return-value") (param i32) (result i32)
154     (select (i32.const 1) (i32.const 2) (local.get 0)) (return)
155   )
156   (func (export "as-drop-operand") (param i32)
157     (drop (select (i32.const 1) (i32.const 2) (local.get 0)))
158   )
159   (func (export "as-br-value") (param i32) (result i32)
160     (block (result i32) (br 0 (select (i32.const 1) (i32.const 2) (local.get 0))))
161   )
162   (func (export "as-local.set-value") (param i32) (result i32)
163     (local i32) (local.set 0 (select (i32.const 1) (i32.const 2) (local.get 0))) (local.get 0)
164   )
165   (func (export "as-local.tee-value") (param i32) (result i32)
166     (local.tee 0 (select (i32.const 1) (i32.const 2) (local.get 0)))
167   )
168   (global $a (mut i32) (i32.const 10))
169   (func (export "as-global.set-value") (param i32) (result i32)
170     (global.set $a (select (i32.const 1) (i32.const 2) (local.get 0)))
171     (global.get $a)
172   )
173   (func (export "as-load-operand") (param i32) (result i32)
174     (i32.load (select (i32.const 0) (i32.const 4) (local.get 0)))
175   )
176
177   (func (export "as-unary-operand") (param i32) (result i32)
178     (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0)))
179   )
180   (func (export "as-binary-operand") (param i32) (result i32)
181     (i32.mul
182       (select (i32.const 1) (i32.const 2) (local.get 0))
183       (select (i32.const 1) (i32.const 2) (local.get 0))
184     )
185   )
186   (func (export "as-test-operand") (param i32) (result i32)
187     (block (result i32)
188       (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0)))
189     )
190   )
191
192   (func (export "as-compare-left") (param i32) (result i32)
193     (block (result i32)
194       (i32.le_s (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.const 1))
195     )
196   )
197   (func (export "as-compare-right") (param i32) (result i32)
198     (block (result i32)
199       (i32.ne (i32.const 1) (select (i32.const 0) (i32.const 1) (local.get 0)))
200     )
201   )
202
203   (func (export "as-convert-operand") (param i32) (result i32)
204     (block (result i32)
205       (i32.wrap_i64 (select (i64.const 1) (i64.const 0) (local.get 0)))
206     )
207   )
208 )
209
210 (assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1))
211 (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2))
212 (assert_return (invoke "select-f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1))
213 (assert_return (invoke "select-f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1))
214
215 (assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2))
216 (assert_return (invoke "select-i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1))
217 (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2))
218 (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2))
219
220 (assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan))
221 (assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304))
222 (assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1))
223 (assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1))
224 (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2))
225 (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2))
226 (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan))
227 (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304))
228
229 (assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan))
230 (assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304))
231 (assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1))
232 (assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1))
233 (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2))
234 (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2))
235 (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan))
236 (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304))
237
238 (assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1))
239 (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2))
240 (assert_return (invoke "select-f32-t" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1))
241 (assert_return (invoke "select-f64-t" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1))
242 (assert_return (invoke "select-funcref" (ref.null func) (ref.null func) (i32.const 1)) (ref.null func))
243 (assert_return (invoke "select-externref" (ref.extern 1) (ref.extern 2) (i32.const 1)) (ref.extern 1))
244
245 (assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2))
246 (assert_return (invoke "select-i32-t" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1))
247 (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2))
248 (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2))
249 (assert_return (invoke "select-externref" (ref.extern 1) (ref.extern 2) (i32.const 0)) (ref.extern 2))
250 (assert_return (invoke "select-externref" (ref.extern 2) (ref.extern 1) (i32.const 0)) (ref.extern 1))
251
252 (assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan))
253 (assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304))
254 (assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1))
255 (assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1))
256 (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2))
257 (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2))
258 (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan))
259 (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304))
260
261 (assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan))
262 (assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304))
263 (assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1))
264 (assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1))
265 (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2))
266 (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2))
267 (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan))
268 (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304))
269
270 (assert_return (invoke "join-funcnull" (i32.const 1)) (ref.func))
271 (assert_return (invoke "join-funcnull" (i32.const 0)) (ref.null))
272
273 (assert_trap (invoke "select-trap-left" (i32.const 1)) "unreachable")
274 (assert_trap (invoke "select-trap-left" (i32.const 0)) "unreachable")
275 (assert_trap (invoke "select-trap-right" (i32.const 1)) "unreachable")
276 (assert_trap (invoke "select-trap-right" (i32.const 0)) "unreachable")
277
278 (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 1))
279 (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 0))
280 (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2))
281 (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2))
282 (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 2))
283 (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 3))
284
285 (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 3))
286 (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 2))
287 (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 3))
288 (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 2))
289 (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 3))
290 (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 2))
291
292 (assert_return (invoke "as-if-condition" (i32.const 0)))
293 (assert_return (invoke "as-if-condition" (i32.const 1)))
294 (assert_return (invoke "as-if-then" (i32.const 0)) (i32.const 3))
295 (assert_return (invoke "as-if-then" (i32.const 1)) (i32.const 2))
296 (assert_return (invoke "as-if-else" (i32.const 0)) (i32.const 3))
297 (assert_return (invoke "as-if-else" (i32.const 1)) (i32.const 2))
298
299 (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 3))
300 (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 2))
301 (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 2))
302 (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2))
303
304 (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 3))
305 (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 2))
306 (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2))
307 (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2))
308
309 (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 3))
310 ;;(assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 2))
311 (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 1))
312 (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 1))
313 (assert_trap (invoke "as-call_indirect-last" (i32.const 0)) "undefined element")
314 (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element")
315
316 (assert_return (invoke "as-store-first" (i32.const 0)))
317 (assert_return (invoke "as-store-first" (i32.const 1)))
318 (assert_return (invoke "as-store-last" (i32.const 0)))
319 (assert_return (invoke "as-store-last" (i32.const 1)))
320
321 (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1))
322 (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 3))
323
324 (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 2))
325 (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1))
326 (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 2))
327 (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1))
328 (assert_return (invoke "as-drop-operand" (i32.const 0)))
329 (assert_return (invoke "as-drop-operand" (i32.const 1)))
330 (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 2))
331 (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1))
332 (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 2))
333 (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1))
334 (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 2))
335 (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1))
336 (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 2))
337 (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1))
338 (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 1))
339 (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 1))
340
341 (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0))
342 (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 1))
343 (assert_return (invoke "as-binary-operand" (i32.const 0)) (i32.const 4))
344 (assert_return (invoke "as-binary-operand" (i32.const 1)) (i32.const 1))
345 (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 0))
346 (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 1))
347 (assert_return (invoke "as-compare-left" (i32.const 0)) (i32.const 0))
348 (assert_return (invoke "as-compare-left" (i32.const 1)) (i32.const 1))
349 (assert_return (invoke "as-compare-right" (i32.const 0)) (i32.const 0))
350 (assert_return (invoke "as-compare-right" (i32.const 1)) (i32.const 1))
351 (assert_return (invoke "as-convert-operand" (i32.const 0)) (i32.const 0))
352 (assert_return (invoke "as-convert-operand" (i32.const 1)) (i32.const 1))
353
354 (assert_invalid
355   (module (func $arity-0-implicit (select (nop) (nop) (i32.const 1))))
356   "type mismatch"
357 )
358 (assert_invalid
359   (module (func $arity-0 (select (result) (nop) (nop) (i32.const 1))))
360   "invalid result arity"
361 )
362 (assert_invalid
363   (module (func $arity-2 (result i32 i32)
364     (select (result i32 i32)
365       (i32.const 0) (i32.const 0)
366       (i32.const 0) (i32.const 0)
367       (i32.const 1)
368     )
369   ))
370   "invalid result arity"
371 )
372
373
374 (assert_invalid
375   (module (type $t (func))
376     (func $type-ref-implicit (param $r (ref $t))
377       (drop (select (local.get $r) (local.get $r) (i32.const 1)))
378     )
379   )
380   "type mismatch"
381 )
382 (assert_invalid
383   (module (func $type-funcref-implicit (param $r funcref)
384     (drop (select (local.get $r) (local.get $r) (i32.const 1)))
385   ))
386   "type mismatch"
387 )
388 (assert_invalid
389   (module (func $type-externref-implicit (param $r externref)
390     (drop (select (local.get $r) (local.get $r) (i32.const 1)))
391   ))
392   "type mismatch"
393 )
394
395 (assert_invalid
396   (module (func $type-num-vs-num
397     (drop (select (i32.const 1) (i64.const 1) (i32.const 1)))
398   ))
399   "type mismatch"
400 )
401 (assert_invalid
402   (module (func $type-num-vs-num
403     (drop (select (i32.const 1) (f32.const 1.0) (i32.const 1)))
404   ))
405   "type mismatch"
406 )
407 (assert_invalid
408   (module (func $type-num-vs-num
409     (drop (select (i32.const 1) (f64.const 1.0) (i32.const 1)))
410   ))
411   "type mismatch"
412 )
413
414
415 (assert_invalid
416   (module
417     (func $type-1st-operand-empty
418       (select) (drop)
419     )
420   )
421   "type mismatch"
422 )
423 (assert_invalid
424   (module
425     (func $type-2nd-operand-empty
426       (i32.const 0) (select) (drop)
427     )
428   )
429   "type mismatch"
430 )
431 (assert_invalid
432   (module
433     (func $type-3rd-operand-empty
434       (i32.const 0) (i32.const 0) (select) (drop)
435     )
436   )
437   "type mismatch"
438 )
439 (assert_invalid
440   (module
441     (func $type-1st-operand-empty-in-block
442       (i32.const 0) (i32.const 0) (i32.const 0)
443       (block (select) (drop))
444     )
445   )
446   "type mismatch"
447 )
448 (assert_invalid
449   (module
450     (func $type-2nd-operand-empty-in-block
451       (i32.const 0) (i32.const 0)
452       (block (i32.const 0) (select) (drop))
453     )
454   )
455   "type mismatch"
456 )
457 (assert_invalid
458   (module
459     (func $type-3rd-operand-empty-in-block
460       (i32.const 0)
461       (block (i32.const 0) (i32.const 0) (select) (drop))
462     )
463   )
464   "type mismatch"
465 )
466 (assert_invalid
467   (module
468     (func $type-1st-operand-empty-in-loop
469       (i32.const 0) (i32.const 0) (i32.const 0)
470       (loop (select) (drop))
471     )
472   )
473   "type mismatch"
474 )
475 (assert_invalid
476   (module
477     (func $type-2nd-operand-empty-in-loop
478       (i32.const 0) (i32.const 0)
479       (loop (i32.const 0) (select) (drop))
480     )
481   )
482   "type mismatch"
483 )
484 (assert_invalid
485   (module
486     (func $type-3rd-operand-empty-in-loop
487       (i32.const 0)
488       (loop (i32.const 0) (i32.const 0) (select) (drop))
489     )
490   )
491   "type mismatch"
492 )
493 (assert_invalid
494   (module
495     (func $type-1st-operand-empty-in-then
496       (i32.const 0) (i32.const 0) (i32.const 0)
497       (if (then (select) (drop)))
498     )
499   )
500   "type mismatch"
501 )
502 (assert_invalid
503   (module
504     (func $type-2nd-operand-empty-in-then
505       (i32.const 0) (i32.const 0)
506       (if (then (i32.const 0) (select) (drop)))
507     )
508   )
509   "type mismatch"
510 )
511 (assert_invalid
512   (module
513     (func $type-3rd-operand-empty-in-then
514       (i32.const 0)
515       (if (then (i32.const 0) (i32.const 0) (select) (drop)))
516     )
517   )
518   "type mismatch"
519 )