...
1;; Test the data section
2
3;; Syntax
4
5(module
6 (memory $m 1)
7 (data (i32.const 0))
8 (data (i32.const 1) "a" "" "bcd")
9 (data (offset (i32.const 0)))
10 (data (offset (i32.const 0)) "" "a" "bc" "")
11 (data 0 (i32.const 0))
12 (data 0x0 (i32.const 1) "a" "" "bcd")
13 (data 0x000 (offset (i32.const 0)))
14 (data 0 (offset (i32.const 0)) "" "a" "bc" "")
15 (data $m (i32.const 0))
16 (data $m (i32.const 1) "a" "" "bcd")
17 (data $m (offset (i32.const 0)))
18 (data $m (offset (i32.const 0)) "" "a" "bc" "")
19)
20
21;; Basic use
22
23(module
24 (memory 1)
25 (data (i32.const 0) "a")
26)
27(module
28 (import "spectest" "memory" (memory 1))
29 (data (i32.const 0) "a")
30)
31
32(module
33 (memory 1)
34 (data (i32.const 0) "a")
35 (data (i32.const 3) "b")
36 (data (i32.const 100) "cde")
37 (data (i32.const 5) "x")
38 (data (i32.const 3) "c")
39)
40(module
41 (import "spectest" "memory" (memory 1))
42 (data (i32.const 0) "a")
43 (data (i32.const 1) "b")
44 (data (i32.const 2) "cde")
45 (data (i32.const 3) "f")
46 (data (i32.const 2) "g")
47 (data (i32.const 1) "h")
48)
49
50(module
51 (global (import "spectest" "global_i32") i32)
52 (memory 1)
53 (data (global.get 0) "a")
54)
55(module
56 (global (import "spectest" "global_i32") i32)
57 (import "spectest" "memory" (memory 1))
58 (data (global.get 0) "a")
59)
60
61(module
62 (global $g (import "spectest" "global_i32") i32)
63 (memory 1)
64 (data (global.get $g) "a")
65)
66(module
67 (global $g (import "spectest" "global_i32") i32)
68 (import "spectest" "memory" (memory 1))
69 (data (global.get $g) "a")
70)
71
72;; Use of internal globals in constant expressions is not allowed in MVP.
73;; (module (memory 1) (data (global.get 0) "a") (global i32 (i32.const 0)))
74;; (module (memory 1) (data (global.get $g) "a") (global $g i32 (i32.const 0)))
75
76;; Corner cases
77
78(module
79 (memory 1)
80 (data (i32.const 0) "a")
81 (data (i32.const 0xffff) "b")
82)
83(module
84 (import "spectest" "memory" (memory 1))
85 (data (i32.const 0) "a")
86 (data (i32.const 0xffff) "b")
87)
88
89(module
90 (memory 2)
91 (data (i32.const 0x1_ffff) "a")
92)
93
94(module
95 (memory 0)
96 (data (i32.const 0))
97)
98(module
99 (import "spectest" "memory" (memory 0))
100 (data (i32.const 0))
101)
102
103(module
104 (memory 0 0)
105 (data (i32.const 0))
106)
107
108(module
109 (memory 1)
110 (data (i32.const 0x1_0000) "")
111)
112
113(module
114 (memory 0)
115 (data (i32.const 0) "" "")
116)
117(module
118 (import "spectest" "memory" (memory 0))
119 (data (i32.const 0) "" "")
120)
121
122(module
123 (memory 0 0)
124 (data (i32.const 0) "" "")
125)
126
127(module
128 (import "spectest" "memory" (memory 0))
129 (data (i32.const 0) "a")
130)
131
132(module
133 (import "spectest" "memory" (memory 0 3))
134 (data (i32.const 0) "a")
135)
136
137(module
138 (global (import "spectest" "global_i32") i32)
139 (import "spectest" "memory" (memory 0))
140 (data (global.get 0) "a")
141)
142
143(module
144 (global (import "spectest" "global_i32") i32)
145 (import "spectest" "memory" (memory 0 3))
146 (data (global.get 0) "a")
147)
148
149(module
150 (import "spectest" "memory" (memory 0))
151 (data (i32.const 1) "a")
152)
153
154(module
155 (import "spectest" "memory" (memory 0 3))
156 (data (i32.const 1) "a")
157)
158
159;; Invalid bounds for data
160
161(assert_unlinkable
162 (module
163 (memory 0)
164 (data (i32.const 0) "a")
165 )
166 "data segment does not fit"
167)
168
169(assert_unlinkable
170 (module
171 (memory 0 0)
172 (data (i32.const 0) "a")
173 )
174 "data segment does not fit"
175)
176
177(assert_unlinkable
178 (module
179 (memory 0 1)
180 (data (i32.const 0) "a")
181 )
182 "data segment does not fit"
183)
184
185(assert_unlinkable
186 (module
187 (memory 0)
188 (data (i32.const 1))
189 )
190 "data segment does not fit"
191)
192
193(assert_unlinkable
194 (module
195 (memory 0 1)
196 (data (i32.const 1))
197 )
198 "data segment does not fit"
199)
200
201;; This seems to cause a time-out on Travis.
202(;assert_unlinkable
203 (module
204 (memory 0x10000)
205 (data (i32.const 0xffffffff) "ab")
206 )
207 "" ;; either out of memory or segment does not fit
208;)
209
210(assert_unlinkable
211 (module
212 (global (import "spectest" "global_i32") i32)
213 (memory 0)
214 (data (global.get 0) "a")
215 )
216 "data segment does not fit"
217)
218
219(assert_unlinkable
220 (module
221 (memory 1 2)
222 (data (i32.const 0x1_0000) "a")
223 )
224 "data segment does not fit"
225)
226(assert_unlinkable
227 (module
228 (import "spectest" "memory" (memory 1))
229 (data (i32.const 0x1_0000) "a")
230 )
231 "data segment does not fit"
232)
233
234(assert_unlinkable
235 (module
236 (memory 2)
237 (data (i32.const 0x2_0000) "a")
238 )
239 "data segment does not fit"
240)
241
242(assert_unlinkable
243 (module
244 (memory 2 3)
245 (data (i32.const 0x2_0000) "a")
246 )
247 "data segment does not fit"
248)
249
250(assert_unlinkable
251 (module
252 (memory 1)
253 (data (i32.const -1) "a")
254 )
255 "data segment does not fit"
256)
257(assert_unlinkable
258 (module
259 (import "spectest" "memory" (memory 1))
260 (data (i32.const -1) "a")
261 )
262 "data segment does not fit"
263)
264
265(assert_unlinkable
266 (module
267 (memory 2)
268 (data (i32.const -100) "a")
269 )
270 "data segment does not fit"
271)
272(assert_unlinkable
273 (module
274 (import "spectest" "memory" (memory 1))
275 (data (i32.const -100) "a")
276 )
277 "data segment does not fit"
278)
279
280;; Data without memory
281
282(assert_invalid
283 (module
284 (data (i32.const 0) "")
285 )
286 "unknown memory 0"
287)
288
289;; Invalid offsets
290
291(assert_invalid
292 (module
293 (memory 1)
294 (data (i64.const 0))
295 )
296 "type mismatch"
297)
298
299(assert_invalid
300 (module
301 (memory 1)
302 (data (i32.ctz (i32.const 0)))
303 )
304 "constant expression required"
305)
306
307(assert_invalid
308 (module
309 (memory 1)
310 (data (nop))
311 )
312 "constant expression required"
313)
314
315(assert_invalid
316 (module
317 (memory 1)
318 (data (offset (nop) (i32.const 0)))
319 )
320 "constant expression required"
321)
322
323(assert_invalid
324 (module
325 (memory 1)
326 (data (offset (i32.const 0) (nop)))
327 )
328 "constant expression required"
329)
330
331;; Use of internal globals in constant expressions is not allowed in MVP.
332;; (assert_invalid
333;; (module (memory 1) (data (global.get $g)) (global $g (mut i32) (i32.const 0)))
334;; "constant expression required"
335;; )
View as plain text