]> git.proxmox.com Git - rustc.git/blob - src/binaryen/test/spec/labels.wast
New upstream version 1.25.0+dfsg1
[rustc.git] / src / binaryen / test / spec / labels.wast
1 (module
2 (func (export "block") (result i32)
3 (block $exit i32
4 (br $exit (i32.const 1))
5 (i32.const 0)
6 )
7 )
8
9 (func (export "loop1") (result i32)
10 (local $i i32)
11 (set_local $i (i32.const 0))
12 (block $exit i32
13 (loop $cont i32
14 (set_local $i (i32.add (get_local $i) (i32.const 1)))
15 (if (i32.eq (get_local $i) (i32.const 5))
16 (br $exit (get_local $i))
17 )
18 (br $cont)
19 )
20 )
21 )
22
23 (func (export "loop2") (result i32)
24 (local $i i32)
25 (set_local $i (i32.const 0))
26 (block $exit i32
27 (loop $cont i32
28 (set_local $i (i32.add (get_local $i) (i32.const 1)))
29 (if (i32.eq (get_local $i) (i32.const 5))
30 (br $cont)
31 )
32 (if (i32.eq (get_local $i) (i32.const 8))
33 (br $exit (get_local $i))
34 )
35 (set_local $i (i32.add (get_local $i) (i32.const 1)))
36 (br $cont)
37 )
38 )
39 )
40
41 (func (export "loop3") (result i32)
42 (local $i i32)
43 (set_local $i (i32.const 0))
44 (block $exit i32
45 (loop $cont i32
46 (set_local $i (i32.add (get_local $i) (i32.const 1)))
47 (if (i32.eq (get_local $i) (i32.const 5))
48 (br $exit (get_local $i))
49 )
50 (get_local $i)
51 )
52 )
53 )
54
55 (func (export "loop4") (param $max i32) (result i32)
56 (local $i i32)
57 (set_local $i (i32.const 1))
58 (block $exit i32
59 (loop $cont i32
60 (set_local $i (i32.add (get_local $i) (get_local $i)))
61 (if (i32.gt_u (get_local $i) (get_local $max))
62 (br $exit (get_local $i))
63 )
64 (br $cont)
65 )
66 )
67 )
68
69 (func (export "loop5") (result i32)
70 (i32.add
71 (loop $l i32 (i32.const 1))
72 (i32.const 1)
73 )
74 )
75
76 (func (export "if") (result i32)
77 (local $i i32)
78 (set_local $i (i32.const 0))
79 (block
80 (if $l
81 (i32.const 1)
82 (then (br $l) (set_local $i (i32.const 666)))
83 )
84 (set_local $i (i32.add (get_local $i) (i32.const 1)))
85 (if $l
86 (i32.const 1)
87 (then (br $l) (set_local $i (i32.const 666)))
88 (else (set_local $i (i32.const 888)))
89 )
90 (set_local $i (i32.add (get_local $i) (i32.const 1)))
91 (if $l
92 (i32.const 1)
93 (then (br $l) (set_local $i (i32.const 666)))
94 (else (set_local $i (i32.const 888)))
95 )
96 (set_local $i (i32.add (get_local $i) (i32.const 1)))
97 (if $l
98 (i32.const 0)
99 (then (set_local $i (i32.const 888)))
100 (else (br $l) (set_local $i (i32.const 666)))
101 )
102 (set_local $i (i32.add (get_local $i) (i32.const 1)))
103 (if $l
104 (i32.const 0)
105 (then (set_local $i (i32.const 888)))
106 (else (br $l) (set_local $i (i32.const 666)))
107 )
108 (set_local $i (i32.add (get_local $i) (i32.const 1)))
109 )
110 (get_local $i)
111 )
112
113 (func (export "if2") (result i32)
114 (local $i i32)
115 (set_local $i (i32.const 0))
116 (block
117 (if
118 (i32.const 1)
119 (then (br 0) (set_local $i (i32.const 666)))
120 )
121 (set_local $i (i32.add (get_local $i) (i32.const 1)))
122 (if
123 (i32.const 1)
124 (then (br 0) (set_local $i (i32.const 666)))
125 (else (set_local $i (i32.const 888)))
126 )
127 (set_local $i (i32.add (get_local $i) (i32.const 1)))
128 (if
129 (i32.const 1)
130 (then (br 0) (set_local $i (i32.const 666)))
131 (else (set_local $i (i32.const 888)))
132 )
133 (set_local $i (i32.add (get_local $i) (i32.const 1)))
134 (if
135 (i32.const 0)
136 (then (set_local $i (i32.const 888)))
137 (else (br 0) (set_local $i (i32.const 666)))
138 )
139 (set_local $i (i32.add (get_local $i) (i32.const 1)))
140 (if
141 (i32.const 0)
142 (then (set_local $i (i32.const 888)))
143 (else (br 0) (set_local $i (i32.const 666)))
144 )
145 (set_local $i (i32.add (get_local $i) (i32.const 1)))
146 )
147 (get_local $i)
148 )
149
150 (func (export "switch") (param i32) (result i32)
151 (block $ret i32
152 (i32.mul (i32.const 10)
153 (block $exit i32
154 (block $0
155 (block $default
156 (block $3
157 (block $2
158 (block $1
159 (br_table $0 $1 $2 $3 $default (get_local 0))
160 ) ;; 1
161 ) ;; 2
162 (br $exit (i32.const 2))
163 ) ;; 3
164 (br $ret (i32.const 3))
165 ) ;; default
166 ) ;; 0
167 (i32.const 5)
168 )
169 )
170 )
171 )
172
173 (func (export "return") (param i32) (result i32)
174 (block $default
175 (block $1
176 (block $0
177 (br_table $0 $1 (get_local 0))
178 (br $default)
179 ) ;; 0
180 (return (i32.const 0))
181 ) ;; 1
182 ) ;; default
183 (i32.const 2)
184 )
185
186 (func (export "br_if0") (result i32)
187 (local $i i32)
188 (set_local $i (i32.const 0))
189 (block $outer i32
190 (block $inner
191 (br_if $inner (i32.const 0))
192 (set_local $i (i32.or (get_local $i) (i32.const 0x1)))
193 (br_if $inner (i32.const 1))
194 (set_local $i (i32.or (get_local $i) (i32.const 0x2)))
195 )
196 (drop (br_if $outer
197 (block i32
198 (set_local $i (i32.or (get_local $i) (i32.const 0x4)))
199 (get_local $i)
200 )
201 (i32.const 0)
202 ))
203 (set_local $i (i32.or (get_local $i) (i32.const 0x8)))
204 (drop (br_if $outer
205 (block i32
206 (set_local $i (i32.or (get_local $i) (i32.const 0x10)))
207 (get_local $i)
208 )
209 (i32.const 1)
210 ))
211 (set_local $i (i32.or (get_local $i) (i32.const 0x20))) (get_local $i)
212 )
213 )
214
215 (func (export "br_if1") (result i32)
216 (block $l0 i32
217 (drop (br_if $l0 (block $l1 i32 (br $l1 (i32.const 1))) (i32.const 1)))
218 (i32.const 1)
219 )
220 )
221
222 (func (export "br_if2") (result i32)
223 (block $l0 i32
224 (if (i32.const 1)
225 (br $l0 (block $l1 i32 (br $l1 (i32.const 1))))
226 )
227 (i32.const 1)
228 )
229 )
230
231 (func (export "br_if3") (result i32)
232 (local $i1 i32)
233 (drop
234 (i32.add
235 (block $l0 i32
236 (drop (br_if $l0
237 (block i32 (set_local $i1 (i32.const 1)) (get_local $i1))
238 (block i32 (set_local $i1 (i32.const 2)) (get_local $i1))
239 ))
240 (i32.const 0)
241 )
242 (i32.const 0)
243 )
244 )
245 (get_local $i1)
246 )
247
248 (func (export "br") (result i32)
249 (block $l0 i32
250 (if (i32.const 1)
251 (br $l0 (block $l1 i32 (br $l1 (i32.const 1))))
252 (block (drop (block $l1 i32 (br $l1 (i32.const 1)))))
253 )
254 (i32.const 1)
255 )
256 )
257
258 (func (export "shadowing") (result i32)
259 (block $l1 i32 (i32.xor (br $l1 (i32.const 1)) (i32.const 2)))
260 )
261
262 (func (export "redefinition") (result i32)
263 (block $l1 i32
264 (i32.add
265 (block $l1 i32 (i32.const 2))
266 (block $l1 i32 (br $l1 (i32.const 3)))
267 )
268 )
269 )
270 )
271
272 (assert_return (invoke "block") (i32.const 1))
273 (assert_return (invoke "loop1") (i32.const 5))
274 (assert_return (invoke "loop2") (i32.const 8))
275 (assert_return (invoke "loop3") (i32.const 1))
276 (assert_return (invoke "loop4" (i32.const 8)) (i32.const 16))
277 (assert_return (invoke "loop5") (i32.const 2))
278 (assert_return (invoke "if") (i32.const 5))
279 (assert_return (invoke "if2") (i32.const 5))
280 (assert_return (invoke "switch" (i32.const 0)) (i32.const 50))
281 (assert_return (invoke "switch" (i32.const 1)) (i32.const 20))
282 (assert_return (invoke "switch" (i32.const 2)) (i32.const 20))
283 (assert_return (invoke "switch" (i32.const 3)) (i32.const 3))
284 (assert_return (invoke "switch" (i32.const 4)) (i32.const 50))
285 (assert_return (invoke "switch" (i32.const 5)) (i32.const 50))
286 (assert_return (invoke "return" (i32.const 0)) (i32.const 0))
287 (assert_return (invoke "return" (i32.const 1)) (i32.const 2))
288 (assert_return (invoke "return" (i32.const 2)) (i32.const 2))
289 (assert_return (invoke "br_if0") (i32.const 0x1d))
290 (assert_return (invoke "br_if1") (i32.const 1))
291 (assert_return (invoke "br_if2") (i32.const 1))
292 (assert_return (invoke "br_if3") (i32.const 2))
293 (assert_return (invoke "br") (i32.const 1))
294 (assert_return (invoke "shadowing") (i32.const 1))
295 (assert_return (invoke "redefinition") (i32.const 5))
296
297 (assert_invalid
298 (module (func (block $l (f32.neg (br_if $l (i32.const 1))) (nop))))
299 "type mismatch"
300 )
301 (assert_invalid
302 (module (func (block $l (br_if $l (f32.const 0) (i32.const 1)))))
303 "type mismatch"
304 )
305 (assert_invalid
306 (module (func (block $l (br_if $l (f32.const 0) (i32.const 1)))))
307 "type mismatch"
308 )