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