|
17 | 17 |
|
18 | 18 | ;; CHECK: (type $array-i32 (array (mut i32)))
|
19 | 19 |
|
| 20 | + ;; CHECK: (type $referrer (struct (field (mut (ref null $empty))))) |
| 21 | + (type $referrer (struct (field (mut (ref null $empty))))) |
| 22 | + |
20 | 23 | ;; CHECK: (type $B (struct (field (mut f64))))
|
21 | 24 | (type $B (struct (field (mut f64))))
|
22 | 25 |
|
|
175 | 178 | (struct.get $struct 0 (local.get $x))
|
176 | 179 | )
|
177 | 180 | )
|
178 |
| - ;; CHECK: (func $modify-gc-heap (type $6) (param $x (ref null $struct)) |
| 181 | + ;; CHECK: (func $modify-gc-heap (type $7) (param $x (ref null $struct)) |
179 | 182 | ;; CHECK-NEXT: (struct.set $struct 0
|
180 | 183 | ;; CHECK-NEXT: (local.get $x)
|
181 | 184 | ;; CHECK-NEXT: (i32.add
|
|
229 | 232 | (struct.get $struct 0 (local.get $x))
|
230 | 233 | )
|
231 | 234 | )
|
232 |
| - ;; CHECK: (func $load-from-struct-bad-arrive (type $6) (param $x (ref null $struct)) |
| 235 | + ;; CHECK: (func $load-from-struct-bad-arrive (type $7) (param $x (ref null $struct)) |
233 | 236 | ;; CHECK-NEXT: (call $log
|
234 | 237 | ;; CHECK-NEXT: (struct.get $struct 0
|
235 | 238 | ;; CHECK-NEXT: (local.get $x)
|
|
242 | 245 | (struct.get $struct 0 (local.get $x))
|
243 | 246 | )
|
244 | 247 | )
|
245 |
| - ;; CHECK: (func $ref-comparisons (type $12) (param $x (ref null $struct)) (param $y (ref null $struct)) |
| 248 | + ;; CHECK: (func $ref-comparisons (type $13) (param $x (ref null $struct)) (param $y (ref null $struct)) |
246 | 249 | ;; CHECK-NEXT: (local $z (ref null $struct))
|
247 | 250 | ;; CHECK-NEXT: (local $w (ref null $struct))
|
248 | 251 | ;; CHECK-NEXT: (call $log
|
|
395 | 398 | (local.get $tempresult)
|
396 | 399 | )
|
397 | 400 |
|
398 |
| - ;; CHECK: (func $propagate-uncertain-param (type $7) (param $input (ref $empty)) (result i32) |
| 401 | + ;; CHECK: (func $propagate-uncertain-param (type $8) (param $input (ref $empty)) (result i32) |
399 | 402 | ;; CHECK-NEXT: (local $tempresult i32)
|
400 | 403 | ;; CHECK-NEXT: (local $tempref (ref null $empty))
|
401 | 404 | ;; CHECK-NEXT: (local.set $tempresult
|
|
420 | 423 | (local.get $tempresult)
|
421 | 424 | )
|
422 | 425 |
|
423 |
| - ;; CHECK: (func $propagate-different-params (type $13) (param $input1 (ref $empty)) (param $input2 (ref $empty)) (result i32) |
| 426 | + ;; CHECK: (func $propagate-different-params (type $14) (param $input1 (ref $empty)) (param $input2 (ref $empty)) (result i32) |
424 | 427 | ;; CHECK-NEXT: (local $tempresult i32)
|
425 | 428 | ;; CHECK-NEXT: (local.set $tempresult
|
426 | 429 | ;; CHECK-NEXT: (ref.eq
|
|
442 | 445 | (local.get $tempresult)
|
443 | 446 | )
|
444 | 447 |
|
445 |
| - ;; CHECK: (func $propagate-same-param (type $7) (param $input (ref $empty)) (result i32) |
| 448 | + ;; CHECK: (func $propagate-same-param (type $8) (param $input (ref $empty)) (result i32) |
446 | 449 | ;; CHECK-NEXT: (local $tempresult i32)
|
447 | 450 | ;; CHECK-NEXT: (local.set $tempresult
|
448 | 451 | ;; CHECK-NEXT: (ref.eq
|
|
744 | 747 | )
|
745 | 748 | )
|
746 | 749 |
|
747 |
| - ;; CHECK: (func $helper (type $14) (param $0 i32) (result i32) |
| 750 | + ;; CHECK: (func $helper (type $15) (param $0 i32) (result i32) |
748 | 751 | ;; CHECK-NEXT: (unreachable)
|
749 | 752 | ;; CHECK-NEXT: )
|
750 | 753 | (func $helper (param i32) (result i32)
|
|
822 | 825 | )
|
823 | 826 | )
|
824 | 827 |
|
825 |
| - ;; CHECK: (func $receive-f64 (type $15) (param $0 f64) |
| 828 | + ;; CHECK: (func $receive-f64 (type $16) (param $0 f64) |
826 | 829 | ;; CHECK-NEXT: (unreachable)
|
827 | 830 | ;; CHECK-NEXT: )
|
828 | 831 | (func $receive-f64 (param f64)
|
829 | 832 | (unreachable)
|
830 | 833 | )
|
831 | 834 |
|
832 |
| - ;; CHECK: (func $odd-cast-and-get-non-null (type $16) (param $temp (ref $func-return-i32)) |
| 835 | + ;; CHECK: (func $odd-cast-and-get-non-null (type $17) (param $temp (ref $func-return-i32)) |
833 | 836 | ;; CHECK-NEXT: (local.set $temp
|
834 | 837 | ;; CHECK-NEXT: (ref.cast (ref nofunc)
|
835 | 838 | ;; CHECK-NEXT: (ref.func $receive-f64)
|
|
857 | 860 | )
|
858 | 861 | )
|
859 | 862 |
|
860 |
| - ;; CHECK: (func $new_block_unreachable (type $9) (result anyref) |
| 863 | + ;; CHECK: (func $new_block_unreachable (type $10) (result anyref) |
861 | 864 | ;; CHECK-NEXT: (block ;; (replaces unreachable StructNew we can't emit)
|
862 | 865 | ;; CHECK-NEXT: (drop
|
863 | 866 | ;; CHECK-NEXT: (block
|
|
878 | 881 | )
|
879 | 882 | )
|
880 | 883 |
|
881 |
| - ;; CHECK: (func $br_on_cast-on-creation (type $17) (result (ref $empty)) |
| 884 | + ;; CHECK: (func $br_on_cast-on-creation (type $18) (result (ref $empty)) |
882 | 885 | ;; CHECK-NEXT: (block $label (result (ref (exact $empty)))
|
883 | 886 | ;; CHECK-NEXT: (drop
|
884 | 887 | ;; CHECK-NEXT: (br_on_cast $label (ref (exact $empty)) (ref (exact $empty))
|
|
977 | 980 | )
|
978 | 981 | )
|
979 | 982 |
|
980 |
| - ;; CHECK: (func $remove-set (type $18) (result (ref func)) |
| 983 | + ;; CHECK: (func $remove-set (type $19) (result (ref func)) |
981 | 984 | ;; CHECK-NEXT: (local $nn funcref)
|
982 | 985 | ;; CHECK-NEXT: (local $i i32)
|
983 | 986 | ;; CHECK-NEXT: (loop $loop
|
|
1020 | 1023 | )
|
1021 | 1024 | )
|
1022 | 1025 |
|
1023 |
| - ;; CHECK: (func $strings (type $19) (param $param (ref string)) |
| 1026 | + ;; CHECK: (func $strings (type $20) (param $param (ref string)) |
1024 | 1027 | ;; CHECK-NEXT: (local $s (ref string))
|
1025 | 1028 | ;; CHECK-NEXT: (local.set $s
|
1026 | 1029 | ;; CHECK-NEXT: (string.const "hello, world")
|
|
1059 | 1062 | )
|
1060 | 1063 | )
|
1061 | 1064 |
|
1062 |
| - ;; CHECK: (func $get-nonnullable-in-unreachable (type $9) (result anyref) |
| 1065 | + ;; CHECK: (func $get-nonnullable-in-unreachable (type $10) (result anyref) |
1063 | 1066 | ;; CHECK-NEXT: (local $x (ref any))
|
1064 | 1067 | ;; CHECK-NEXT: (local.tee $x
|
1065 | 1068 | ;; CHECK-NEXT: (unreachable)
|
|
1096 | 1099 | (local.get $x)
|
1097 | 1100 | )
|
1098 | 1101 |
|
1099 |
| - ;; CHECK: (func $get-nonnullable-in-unreachable-entry (type $10) (param $x i32) (param $y (ref any)) |
| 1102 | + ;; CHECK: (func $get-nonnullable-in-unreachable-entry (type $11) (param $x i32) (param $y (ref any)) |
1100 | 1103 | ;; CHECK-NEXT: (local $0 (ref any))
|
1101 | 1104 | ;; CHECK-NEXT: (unreachable)
|
1102 | 1105 | ;; CHECK-NEXT: (local.set $0
|
|
1130 | 1133 | )
|
1131 | 1134 | )
|
1132 | 1135 |
|
1133 |
| - ;; CHECK: (func $get-nonnullable-in-unreachable-later-loop (type $10) (param $x i32) (param $y (ref any)) |
| 1136 | + ;; CHECK: (func $get-nonnullable-in-unreachable-later-loop (type $11) (param $x i32) (param $y (ref any)) |
1134 | 1137 | ;; CHECK-NEXT: (local $0 (ref any))
|
1135 | 1138 | ;; CHECK-NEXT: (if
|
1136 | 1139 | ;; CHECK-NEXT: (local.get $x)
|
|
1175 | 1178 | )
|
1176 | 1179 | )
|
1177 | 1180 |
|
1178 |
| - ;; CHECK: (func $get-nonnullable-in-unreachable-tuple (type $20) (result anyref i32) |
| 1181 | + ;; CHECK: (func $get-nonnullable-in-unreachable-tuple (type $21) (result anyref i32) |
1179 | 1182 | ;; CHECK-NEXT: (local $x (tuple (ref any) i32))
|
1180 | 1183 | ;; CHECK-NEXT: (local.tee $x
|
1181 | 1184 | ;; CHECK-NEXT: (unreachable)
|
|
1281 | 1284 | )
|
1282 | 1285 | )
|
1283 | 1286 | )
|
1284 |
| -) |
1285 | 1287 |
|
| 1288 | + ;; CHECK: (func $nested-struct-ref.eq (type $2) |
| 1289 | + ;; CHECK-NEXT: (local $A (ref $referrer)) |
| 1290 | + ;; CHECK-NEXT: (local $B (ref $empty)) |
| 1291 | + ;; CHECK-NEXT: (local $A2 (ref $referrer)) |
| 1292 | + ;; CHECK-NEXT: (local $temp i32) |
| 1293 | + ;; CHECK-NEXT: (local.set $A2 |
| 1294 | + ;; CHECK-NEXT: (local.tee $A |
| 1295 | + ;; CHECK-NEXT: (struct.new $referrer |
| 1296 | + ;; CHECK-NEXT: (local.tee $B |
| 1297 | + ;; CHECK-NEXT: (struct.new_default $empty) |
| 1298 | + ;; CHECK-NEXT: ) |
| 1299 | + ;; CHECK-NEXT: ) |
| 1300 | + ;; CHECK-NEXT: ) |
| 1301 | + ;; CHECK-NEXT: ) |
| 1302 | + ;; CHECK-NEXT: (local.set $temp |
| 1303 | + ;; CHECK-NEXT: (i32.const 1) |
| 1304 | + ;; CHECK-NEXT: ) |
| 1305 | + ;; CHECK-NEXT: (local.set $temp |
| 1306 | + ;; CHECK-NEXT: (i32.const 0) |
| 1307 | + ;; CHECK-NEXT: ) |
| 1308 | + ;; CHECK-NEXT: ) |
| 1309 | + (func $nested-struct-ref.eq |
| 1310 | + (local $A (ref $referrer)) |
| 1311 | + (local $B (ref $empty)) |
| 1312 | + (local $A2 (ref $referrer)) |
| 1313 | + (local $temp i32) |
| 1314 | + ;; Create $A, and copy to $A2. |
| 1315 | + (local.set $A2 |
| 1316 | + (local.tee $A |
| 1317 | + (struct.new $referrer |
| 1318 | + (local.tee $B |
| 1319 | + (struct.new_default $empty) |
| 1320 | + ) |
| 1321 | + ) |
| 1322 | + ) |
| 1323 | + ) |
| 1324 | + ;; They should be equal, so this can be 1. |
| 1325 | + (local.set $temp |
| 1326 | + (ref.eq |
| 1327 | + (local.get $A) |
| 1328 | + (local.get $A2) |
| 1329 | + ) |
| 1330 | + ) |
| 1331 | + ;; $A and $B are of course different. |
| 1332 | + (local.set $temp |
| 1333 | + (ref.eq |
| 1334 | + (local.get $A) |
| 1335 | + (local.get $B) |
| 1336 | + ) |
| 1337 | + ) |
| 1338 | + ) |
| 1339 | +) |
0 commit comments