]> git.proxmox.com Git - rustc.git/blob - src/binaryen/test/spec/return.wast
New upstream version 1.23.0+dfsg1
[rustc.git] / src / binaryen / test / spec / return.wast
1 ;; Test `return` operator
2
3 (module
4 ;; Auxiliary definition
5 (func $dummy)
6
7 (func (export "type-i32") (drop (i32.ctz (return))))
8 (func (export "type-i64") (drop (i64.ctz (return))))
9 (func (export "type-f32") (drop (f32.neg (return))))
10 (func (export "type-f64") (drop (f64.neg (return))))
11
12 (func (export "nullary") (return))
13 (func (export "unary") (result f64) (return (f64.const 3)))
14
15 (func (export "as-func-first") (result i32)
16 (return (i32.const 1)) (i32.const 2)
17 )
18 (func (export "as-func-mid") (result i32)
19 (call $dummy) (return (i32.const 2)) (i32.const 3)
20 )
21 (func (export "as-func-last")
22 (nop) (call $dummy) (return)
23 )
24 (func (export "as-func-value") (result i32)
25 (nop) (call $dummy) (return (i32.const 3))
26 )
27
28 (func (export "as-block-first")
29 (block (return) (call $dummy))
30 )
31 (func (export "as-block-mid")
32 (block (call $dummy) (return) (call $dummy))
33 )
34 (func (export "as-block-last")
35 (block (nop) (call $dummy) (return))
36 )
37 (func (export "as-block-value") (result i32)
38 (block i32 (nop) (call $dummy) (return (i32.const 2)))
39 )
40
41 (func (export "as-loop-first") (result i32)
42 (loop i32 (return (i32.const 3)) (i32.const 2))
43 )
44 (func (export "as-loop-mid") (result i32)
45 (loop i32 (call $dummy) (return (i32.const 4)) (i32.const 2))
46 )
47 (func (export "as-loop-last") (result i32)
48 (loop i32 (nop) (call $dummy) (return (i32.const 5)))
49 )
50
51 (func (export "as-br-value") (result i32)
52 (block i32 (br 0 (return (i32.const 9))))
53 )
54
55 (func (export "as-br_if-cond")
56 (block (br_if 0 (return)))
57 )
58 (func (export "as-br_if-value") (result i32)
59 (block i32 (br_if 0 (return (i32.const 8)) (i32.const 1)) (i32.const 7))
60 )
61 (func (export "as-br_if-value-cond") (result i32)
62 (block i32 (drop (br_if 0 (i32.const 6) (return (i32.const 9)))) (i32.const 7))
63 )
64
65 (func (export "as-br_table-index") (result i64)
66 (block (br_table 0 0 0 (return (i64.const 9)))) (i64.const -1)
67 )
68 (func (export "as-br_table-value") (result i32)
69 (block i32
70 (br_table 0 0 0 (return (i32.const 10)) (i32.const 1)) (i32.const 7)
71 )
72 )
73 (func (export "as-br_table-value-index") (result i32)
74 (block i32
75 (br_table 0 0 (i32.const 6) (return (i32.const 11))) (i32.const 7)
76 )
77 )
78
79 (func (export "as-return-value") (result i64)
80 (return (return (i64.const 7)))
81 )
82
83 (func (export "as-if-cond") (result i32)
84 (if i32 (return (i32.const 2)) (i32.const 0) (i32.const 1))
85 )
86 (func (export "as-if-then") (param i32 i32) (result i32)
87 (if i32 (get_local 0) (return (i32.const 3)) (get_local 1))
88 )
89 (func (export "as-if-else") (param i32 i32) (result i32)
90 (if i32 (get_local 0) (get_local 1) (return (i32.const 4)))
91 )
92
93 (func (export "as-select-first") (param i32 i32) (result i32)
94 (select (return (i32.const 5)) (get_local 0) (get_local 1))
95 )
96 (func (export "as-select-second") (param i32 i32) (result i32)
97 (select (get_local 0) (return (i32.const 6)) (get_local 1))
98 )
99 (func (export "as-select-cond") (result i32)
100 (select (i32.const 0) (i32.const 1) (return (i32.const 7)))
101 )
102
103 (func $f (param i32 i32 i32) (result i32) (i32.const -1))
104 (func (export "as-call-first") (result i32)
105 (call $f (return (i32.const 12)) (i32.const 2) (i32.const 3))
106 )
107 (func (export "as-call-mid") (result i32)
108 (call $f (i32.const 1) (return (i32.const 13)) (i32.const 3))
109 )
110 (func (export "as-call-last") (result i32)
111 (call $f (i32.const 1) (i32.const 2) (return (i32.const 14)))
112 )
113
114 (type $sig (func (param i32 i32 i32) (result i32)))
115 (table anyfunc (elem $f))
116 (func (export "as-call_indirect-func") (result i32)
117 (call_indirect (type $sig) (return (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3))
118 )
119 (func (export "as-call_indirect-first") (result i32)
120 (call_indirect (type $sig) (i32.const 0) (return (i32.const 21)) (i32.const 2) (i32.const 3))
121 )
122 (func (export "as-call_indirect-mid") (result i32)
123 (call_indirect (type $sig) (i32.const 0) (i32.const 1) (return (i32.const 22)) (i32.const 3))
124 )
125 (func (export "as-call_indirect-last") (result i32)
126 (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (return (i32.const 23)))
127 )
128
129 (func (export "as-set_local-value") (result i32) (local f32)
130 (set_local 0 (return (i32.const 17))) (i32.const -1)
131 )
132
133 (memory 1)
134 (func (export "as-load-address") (result f32)
135 (f32.load (return (f32.const 1.7)))
136 )
137 (func (export "as-loadN-address") (result i64)
138 (i64.load8_s (return (i64.const 30)))
139 )
140
141 (func (export "as-store-address") (result i32)
142 (f64.store (return (i32.const 30)) (f64.const 7)) (i32.const -1)
143 )
144 (func (export "as-store-value") (result i32)
145 (i64.store (i32.const 2) (return (i32.const 31))) (i32.const -1)
146 )
147
148 (func (export "as-storeN-address") (result i32)
149 (i32.store8 (return (i32.const 32)) (i32.const 7)) (i32.const -1)
150 )
151 (func (export "as-storeN-value") (result i32)
152 (i64.store16 (i32.const 2) (return (i32.const 33))) (i32.const -1)
153 )
154
155 (func (export "as-unary-operand") (result f32)
156 (f32.neg (return (f32.const 3.4)))
157 )
158
159 (func (export "as-binary-left") (result i32)
160 (i32.add (return (i32.const 3)) (i32.const 10))
161 )
162 (func (export "as-binary-right") (result i64)
163 (i64.sub (i64.const 10) (return (i64.const 45)))
164 )
165
166 (func (export "as-test-operand") (result i32)
167 (i32.eqz (return (i32.const 44)))
168 )
169
170 (func (export "as-compare-left") (result i32)
171 (f64.le (return (i32.const 43)) (f64.const 10))
172 )
173 (func (export "as-compare-right") (result i32)
174 (f32.ne (f32.const 10) (return (i32.const 42)))
175 )
176
177 (func (export "as-convert-operand") (result i32)
178 (i32.wrap/i64 (return (i32.const 41)))
179 )
180
181 (func (export "as-grow_memory-size") (result i32)
182 (grow_memory (return (i32.const 40)))
183 )
184 )
185
186 (assert_return (invoke "type-i32"))
187 (assert_return (invoke "type-i64"))
188 (assert_return (invoke "type-f32"))
189 (assert_return (invoke "type-f64"))
190
191 (assert_return (invoke "nullary"))
192 (assert_return (invoke "unary") (f64.const 3))
193
194 (assert_return (invoke "as-func-first") (i32.const 1))
195 (assert_return (invoke "as-func-mid") (i32.const 2))
196 (assert_return (invoke "as-func-last"))
197 (assert_return (invoke "as-func-value") (i32.const 3))
198
199 (assert_return (invoke "as-block-first"))
200 (assert_return (invoke "as-block-mid"))
201 (assert_return (invoke "as-block-last"))
202 (assert_return (invoke "as-block-value") (i32.const 2))
203
204 (assert_return (invoke "as-loop-first") (i32.const 3))
205 (assert_return (invoke "as-loop-mid") (i32.const 4))
206 (assert_return (invoke "as-loop-last") (i32.const 5))
207
208 (assert_return (invoke "as-br-value") (i32.const 9))
209
210 (assert_return (invoke "as-br_if-cond"))
211 (assert_return (invoke "as-br_if-value") (i32.const 8))
212 (assert_return (invoke "as-br_if-value-cond") (i32.const 9))
213
214 (assert_return (invoke "as-br_table-index") (i64.const 9))
215 (assert_return (invoke "as-br_table-value") (i32.const 10))
216 (assert_return (invoke "as-br_table-value-index") (i32.const 11))
217
218 (assert_return (invoke "as-return-value") (i64.const 7))
219
220 (assert_return (invoke "as-if-cond") (i32.const 2))
221 (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3))
222 (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6))
223 (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4))
224 (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6))
225
226 (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5))
227 (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5))
228 (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6))
229 (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6))
230 (assert_return (invoke "as-select-cond") (i32.const 7))
231
232 (assert_return (invoke "as-call-first") (i32.const 12))
233 (assert_return (invoke "as-call-mid") (i32.const 13))
234 (assert_return (invoke "as-call-last") (i32.const 14))
235
236 (assert_return (invoke "as-call_indirect-func") (i32.const 20))
237 (assert_return (invoke "as-call_indirect-first") (i32.const 21))
238 (assert_return (invoke "as-call_indirect-mid") (i32.const 22))
239 (assert_return (invoke "as-call_indirect-last") (i32.const 23))
240
241 (assert_return (invoke "as-set_local-value") (i32.const 17))
242
243 (assert_return (invoke "as-load-address") (f32.const 1.7))
244 (assert_return (invoke "as-loadN-address") (i64.const 30))
245
246 (assert_return (invoke "as-store-address") (i32.const 30))
247 (assert_return (invoke "as-store-value") (i32.const 31))
248 (assert_return (invoke "as-storeN-address") (i32.const 32))
249 (assert_return (invoke "as-storeN-value") (i32.const 33))
250
251 (assert_return (invoke "as-unary-operand") (f32.const 3.4))
252
253 (assert_return (invoke "as-binary-left") (i32.const 3))
254 (assert_return (invoke "as-binary-right") (i64.const 45))
255
256 (assert_return (invoke "as-test-operand") (i32.const 44))
257
258 (assert_return (invoke "as-compare-left") (i32.const 43))
259 (assert_return (invoke "as-compare-right") (i32.const 42))
260
261 (assert_return (invoke "as-convert-operand") (i32.const 41))
262
263 (assert_return (invoke "as-grow_memory-size") (i32.const 40))
264
265 (assert_invalid
266 (module (func $type-value-empty-vs-num (result f64) (return)))
267 "type mismatch"
268 )
269 (assert_invalid
270 (module (func $type-value-void-vs-num (result f64) (return (nop))))
271 "type mismatch"
272 )
273 (assert_invalid
274 (module (func $type-value-num-vs-num (result f64) (return (i64.const 1))))
275 "type mismatch"
276 )
277