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