|
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