File tree 4 files changed +53
-8
lines changed
4 files changed +53
-8
lines changed Original file line number Diff line number Diff line change @@ -106,7 +106,6 @@ let match_extern_type et1 et2 =
106
106
| ExternGlobalType gt1 , ExternGlobalType gt2 -> match_global_type gt1 gt2
107
107
| _ , _ -> false
108
108
109
-
110
109
(* String conversion *)
111
110
112
111
let string_of_num_type = function
Original file line number Diff line number Diff line change @@ -340,13 +340,11 @@ let rec check_instr (c : context) (e : instr) (s : infer_result_type) : op_type
340
340
| TableCopy (x , y ) ->
341
341
let TableType (_lim1, it1, t1) = table c x in
342
342
let TableType (_lim2, it2, t2) = table c y in
343
+ let it3 = min it1 it2 in
343
344
require (t1 = t2) x.at
344
345
(" type mismatch: source element type " ^ string_of_ref_type t1 ^
345
346
" does not match destination element type " ^ string_of_ref_type t2);
346
- require (it1 = it2) x.at
347
- (" type mismatch: source index type " ^ string_of_index_type it1 ^
348
- " does not match destination index type " ^ string_of_index_type it2);
349
- [value_type_of_index_type it1; value_type_of_index_type it1; value_type_of_index_type it1] --> []
347
+ [value_type_of_index_type it1; value_type_of_index_type it2; value_type_of_index_type it3] --> []
350
348
351
349
| TableInit (x , y ) ->
352
350
let TableType (_lim, it, t1) = table c x in
Original file line number Diff line number Diff line change @@ -203,9 +203,9 @@ have to support 32-bit memory addresses in their ABI.
203
203
```
204
204
- table.copy x y
205
205
- ```
206
- C.tables[x ] = it limits t
207
- ----------------------------------
208
- C ⊦ table.copy x : [it it it ] → []
206
+ C.tables[d] = iN limits t C.tables[s ] = iM limits t K = min {N, M}
207
+ -----------------------------------------------------------------------------
208
+ C ⊦ table.copy d s : [iN iM iK ] → []
209
209
```
210
210
- table.init x y
211
211
- ```
Original file line number Diff line number Diff line change
1
+ ;; Valid cases
2
+ (module
3
+ (table $t32 30 30 funcref )
4
+ (table $t64 i64 30 30 funcref )
5
+
6
+ (func (export " test32" )
7
+ (table.copy $t32 $t32 (i32.const 13 ) (i32.const 2 ) (i32.const 3 )))
8
+
9
+ (func (export " test64" )
10
+ (table.copy $t64 $t64 (i64.const 13 ) (i64.const 2 ) (i64.const 3 )))
11
+
12
+ (func (export " test_64to32" )
13
+ (table.copy $t32 $t64 (i32.const 13 ) (i64.const 2 ) (i32.const 3 )))
14
+
15
+ (func (export " test_32to64" )
16
+ (table.copy $t64 $t32 (i64.const 13 ) (i32.const 2 ) (i32.const 3 )))
17
+ )
18
+
19
+ ;; Invalid cases
20
+ (assert_invalid (module
21
+ (table $t32 30 30 funcref )
22
+ (table $t64 i64 30 30 funcref )
23
+
24
+ (func (export " bad_size_arg" )
25
+ (table.copy $t32 $t64 (i32.const 13 ) (i64.const 2 ) (i64.const 3 )))
26
+ )
27
+ " type mismatch"
28
+ )
29
+
30
+ (assert_invalid (module
31
+ (table $t32 30 30 funcref )
32
+ (table $t64 i64 30 30 funcref )
33
+
34
+ (func (export " bad_src_idx" )
35
+ (table.copy $t32 $t64 (i32.const 13 ) (i32.const 2 ) (i32.const 3 )))
36
+ )
37
+ " type mismatch"
38
+ )
39
+
40
+ (assert_invalid (module
41
+ (table $t32 30 30 funcref )
42
+ (table $t64 i64 30 30 funcref )
43
+
44
+ (func (export " bad_dst_idx" )
45
+ (table.copy $t32 $t64 (i64.const 13 ) (i64.const 2 ) (i32.const 3 )))
46
+ )
47
+ " type mismatch"
48
+ )
You can’t perform that action at this time.
0 commit comments