|
80 | 80 | ) |
81 | 81 | ) |
82 | 82 |
|
83 | | - ;; CHECK: (func $nonnull-cast-desc (type $17) (param $desc (ref null (exact $desc))) (result (ref (exact $struct))) |
| 83 | + ;; CHECK: (func $nonnull-cast-desc (type $18) (param $desc (ref null (exact $desc))) (result (ref (exact $struct))) |
84 | 84 | ;; CHECK-NEXT: (struct.new_default $struct |
85 | 85 | ;; CHECK-NEXT: (local.get $desc) |
86 | 86 | ;; CHECK-NEXT: ) |
87 | 87 | ;; CHECK-NEXT: ) |
88 | | - ;; NTRAP: (func $nonnull-cast-desc (type $17) (param $desc (ref null (exact $desc))) (result (ref (exact $struct))) |
| 88 | + ;; NTRAP: (func $nonnull-cast-desc (type $18) (param $desc (ref null (exact $desc))) (result (ref (exact $struct))) |
89 | 89 | ;; NTRAP-NEXT: (struct.new_default $struct |
90 | 90 | ;; NTRAP-NEXT: (local.get $desc) |
91 | 91 | ;; NTRAP-NEXT: ) |
|
100 | 100 |
|
101 | 101 | ;; Test that when we optimize a struct.new to a struct.new_default, we drop |
102 | 102 | ;; the field operands but keep the descriptor. |
103 | | - ;; CHECK: (func $new-default-keep-desc (type $18) (result anyref) |
| 103 | + ;; CHECK: (func $new-default-keep-desc (type $10) (result anyref) |
104 | 104 | ;; CHECK-NEXT: (struct.new_default $struct-i32 |
105 | 105 | ;; CHECK-NEXT: (block (result (ref (exact $struct-i32.desc))) |
106 | 106 | ;; CHECK-NEXT: (call $effect) |
107 | 107 | ;; CHECK-NEXT: (struct.new_default $struct-i32.desc) |
108 | 108 | ;; CHECK-NEXT: ) |
109 | 109 | ;; CHECK-NEXT: ) |
110 | 110 | ;; CHECK-NEXT: ) |
111 | | - ;; NTRAP: (func $new-default-keep-desc (type $18) (result anyref) |
| 111 | + ;; NTRAP: (func $new-default-keep-desc (type $10) (result anyref) |
112 | 112 | ;; NTRAP-NEXT: (struct.new_default $struct-i32 |
113 | 113 | ;; NTRAP-NEXT: (block (result (ref (exact $struct-i32.desc))) |
114 | 114 | ;; NTRAP-NEXT: (call $effect) |
|
229 | 229 | ) |
230 | 230 | ) |
231 | 231 |
|
232 | | - ;; CHECK: (func $cast-desc-unrelated-type (type $10) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc))) |
| 232 | + ;; CHECK: (func $cast-desc-unrelated-type (type $11) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc))) |
233 | 233 | ;; CHECK-NEXT: (drop |
234 | 234 | ;; CHECK-NEXT: (unreachable) |
235 | 235 | ;; CHECK-NEXT: ) |
236 | 236 | ;; CHECK-NEXT: ) |
237 | | - ;; NTRAP: (func $cast-desc-unrelated-type (type $10) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc))) |
| 237 | + ;; NTRAP: (func $cast-desc-unrelated-type (type $11) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc))) |
238 | 238 | ;; NTRAP-NEXT: (drop |
239 | 239 | ;; NTRAP-NEXT: (unreachable) |
240 | 240 | ;; NTRAP-NEXT: ) |
|
249 | 249 | ) |
250 | 250 | ) |
251 | 251 |
|
252 | | - ;; CHECK: (func $cast-desc-unrelated-type-effects (type $10) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc))) |
| 252 | + ;; CHECK: (func $cast-desc-unrelated-type-effects (type $11) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc))) |
253 | 253 | ;; CHECK-NEXT: (drop |
254 | 254 | ;; CHECK-NEXT: (block |
255 | 255 | ;; CHECK-NEXT: (drop |
|
268 | 268 | ;; CHECK-NEXT: ) |
269 | 269 | ;; CHECK-NEXT: ) |
270 | 270 | ;; CHECK-NEXT: ) |
271 | | - ;; NTRAP: (func $cast-desc-unrelated-type-effects (type $10) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc))) |
| 271 | + ;; NTRAP: (func $cast-desc-unrelated-type-effects (type $11) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc))) |
272 | 272 | ;; NTRAP-NEXT: (drop |
273 | 273 | ;; NTRAP-NEXT: (block |
274 | 274 | ;; NTRAP-NEXT: (drop |
|
303 | 303 | ) |
304 | 304 | ) |
305 | 305 |
|
306 | | - ;; CHECK: (func $cast-desc-unrelated-type-nullable (type $11) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc)) |
| 306 | + ;; CHECK: (func $cast-desc-unrelated-type-nullable (type $12) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc)) |
307 | 307 | ;; CHECK-NEXT: (drop |
308 | 308 | ;; CHECK-NEXT: (ref.cast_desc (ref null $struct) |
309 | 309 | ;; CHECK-NEXT: (local.get $struct-i32) |
310 | 310 | ;; CHECK-NEXT: (local.get $desc) |
311 | 311 | ;; CHECK-NEXT: ) |
312 | 312 | ;; CHECK-NEXT: ) |
313 | 313 | ;; CHECK-NEXT: ) |
314 | | - ;; NTRAP: (func $cast-desc-unrelated-type-nullable (type $11) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc)) |
| 314 | + ;; NTRAP: (func $cast-desc-unrelated-type-nullable (type $12) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc)) |
315 | 315 | ;; NTRAP-NEXT: (drop |
316 | 316 | ;; NTRAP-NEXT: (ref.null none) |
317 | 317 | ;; NTRAP-NEXT: ) |
|
326 | 326 | ) |
327 | 327 | ) |
328 | 328 |
|
329 | | - ;; CHECK: (func $cast-desc-unrelated-type-nullable-effects (type $11) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc)) |
| 329 | + ;; CHECK: (func $cast-desc-unrelated-type-nullable-effects (type $12) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc)) |
330 | 330 | ;; CHECK-NEXT: (drop |
331 | 331 | ;; CHECK-NEXT: (ref.cast_desc (ref null $struct) |
332 | 332 | ;; CHECK-NEXT: (block (result (ref null $struct-i32)) |
|
340 | 340 | ;; CHECK-NEXT: ) |
341 | 341 | ;; CHECK-NEXT: ) |
342 | 342 | ;; CHECK-NEXT: ) |
343 | | - ;; NTRAP: (func $cast-desc-unrelated-type-nullable-effects (type $11) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc)) |
| 343 | + ;; NTRAP: (func $cast-desc-unrelated-type-nullable-effects (type $12) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc)) |
344 | 344 | ;; NTRAP-NEXT: (drop |
345 | 345 | ;; NTRAP-NEXT: (block (result nullref) |
346 | 346 | ;; NTRAP-NEXT: (drop |
|
466 | 466 | ) |
467 | 467 | ) |
468 | 468 |
|
469 | | - ;; CHECK: (func $cast-desc-weaker-nondesc-child (type $12) (param $ref anyref) (param $desc (ref $sub.desc)) |
| 469 | + ;; CHECK: (func $cast-desc-weaker-nondesc-child (type $13) (param $ref anyref) (param $desc (ref $sub.desc)) |
470 | 470 | ;; CHECK-NEXT: (drop |
471 | 471 | ;; CHECK-NEXT: (ref.cast_desc (ref $sub) |
472 | 472 | ;; CHECK-NEXT: (local.get $ref) |
473 | 473 | ;; CHECK-NEXT: (local.get $desc) |
474 | 474 | ;; CHECK-NEXT: ) |
475 | 475 | ;; CHECK-NEXT: ) |
476 | 476 | ;; CHECK-NEXT: ) |
477 | | - ;; NTRAP: (func $cast-desc-weaker-nondesc-child (type $12) (param $ref anyref) (param $desc (ref $sub.desc)) |
| 477 | + ;; NTRAP: (func $cast-desc-weaker-nondesc-child (type $13) (param $ref anyref) (param $desc (ref $sub.desc)) |
478 | 478 | ;; NTRAP-NEXT: (drop |
479 | 479 | ;; NTRAP-NEXT: (ref.cast_desc (ref $sub) |
480 | 480 | ;; NTRAP-NEXT: (local.get $ref) |
|
494 | 494 | ) |
495 | 495 | ) |
496 | 496 |
|
497 | | - ;; CHECK: (func $cast-desc-weaker-nondesc-child-effects (type $12) (param $ref anyref) (param $desc (ref $sub.desc)) |
| 497 | + ;; CHECK: (func $cast-desc-weaker-nondesc-child-effects (type $13) (param $ref anyref) (param $desc (ref $sub.desc)) |
498 | 498 | ;; CHECK-NEXT: (drop |
499 | 499 | ;; CHECK-NEXT: (ref.cast_desc (ref $sub) |
500 | 500 | ;; CHECK-NEXT: (block (result anyref) |
|
508 | 508 | ;; CHECK-NEXT: ) |
509 | 509 | ;; CHECK-NEXT: ) |
510 | 510 | ;; CHECK-NEXT: ) |
511 | | - ;; NTRAP: (func $cast-desc-weaker-nondesc-child-effects (type $12) (param $ref anyref) (param $desc (ref $sub.desc)) |
| 511 | + ;; NTRAP: (func $cast-desc-weaker-nondesc-child-effects (type $13) (param $ref anyref) (param $desc (ref $sub.desc)) |
512 | 512 | ;; NTRAP-NEXT: (drop |
513 | 513 | ;; NTRAP-NEXT: (ref.cast_desc (ref $sub) |
514 | 514 | ;; NTRAP-NEXT: (block (result anyref) |
|
629 | 629 | ) |
630 | 630 | ) |
631 | 631 |
|
632 | | - ;; CHECK: (func $cast-desc-weaker-desc-child (type $13) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc)) |
| 632 | + ;; CHECK: (func $cast-desc-weaker-desc-child (type $14) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc)) |
633 | 633 | ;; CHECK-NEXT: (drop |
634 | 634 | ;; CHECK-NEXT: (ref.cast_desc (ref $sub) |
635 | 635 | ;; CHECK-NEXT: (ref.cast_desc (ref $struct) |
|
640 | 640 | ;; CHECK-NEXT: ) |
641 | 641 | ;; CHECK-NEXT: ) |
642 | 642 | ;; CHECK-NEXT: ) |
643 | | - ;; NTRAP: (func $cast-desc-weaker-desc-child (type $13) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc)) |
| 643 | + ;; NTRAP: (func $cast-desc-weaker-desc-child (type $14) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc)) |
644 | 644 | ;; NTRAP-NEXT: (drop |
645 | 645 | ;; NTRAP-NEXT: (ref.cast_desc (ref $sub) |
646 | 646 | ;; NTRAP-NEXT: (block (result anyref) |
|
665 | 665 | ) |
666 | 666 | ) |
667 | 667 |
|
668 | | - ;; CHECK: (func $cast-desc-stronger-desc-child (type $13) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc)) |
| 668 | + ;; CHECK: (func $cast-desc-stronger-desc-child (type $14) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc)) |
669 | 669 | ;; CHECK-NEXT: (drop |
670 | 670 | ;; CHECK-NEXT: (ref.cast_desc (ref $struct) |
671 | 671 | ;; CHECK-NEXT: (ref.cast_desc (ref $sub) |
|
676 | 676 | ;; CHECK-NEXT: ) |
677 | 677 | ;; CHECK-NEXT: ) |
678 | 678 | ;; CHECK-NEXT: ) |
679 | | - ;; NTRAP: (func $cast-desc-stronger-desc-child (type $13) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc)) |
| 679 | + ;; NTRAP: (func $cast-desc-stronger-desc-child (type $14) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc)) |
680 | 680 | ;; NTRAP-NEXT: (drop |
681 | 681 | ;; NTRAP-NEXT: (block (result (ref $sub)) |
682 | 682 | ;; NTRAP-NEXT: (ref.cast_desc (ref $sub) |
|
790 | 790 | ) |
791 | 791 | ) |
792 | 792 |
|
793 | | - ;; CHECK: (func $cast-desc-stronger-fallthrough-nullck (type $14) (param $sub (ref null $sub)) (param $desc (ref $desc)) |
| 793 | + ;; CHECK: (func $cast-desc-stronger-fallthrough-nullck (type $15) (param $sub (ref null $sub)) (param $desc (ref $desc)) |
794 | 794 | ;; CHECK-NEXT: (drop |
795 | 795 | ;; CHECK-NEXT: (ref.cast_desc (ref $struct) |
796 | 796 | ;; CHECK-NEXT: (block (result anyref) |
|
800 | 800 | ;; CHECK-NEXT: ) |
801 | 801 | ;; CHECK-NEXT: ) |
802 | 802 | ;; CHECK-NEXT: ) |
803 | | - ;; NTRAP: (func $cast-desc-stronger-fallthrough-nullck (type $14) (param $sub (ref null $sub)) (param $desc (ref $desc)) |
| 803 | + ;; NTRAP: (func $cast-desc-stronger-fallthrough-nullck (type $15) (param $sub (ref null $sub)) (param $desc (ref $desc)) |
804 | 804 | ;; NTRAP-NEXT: (local $2 (ref null $sub)) |
805 | 805 | ;; NTRAP-NEXT: (drop |
806 | 806 | ;; NTRAP-NEXT: (block (result (ref $sub)) |
|
829 | 829 | ) |
830 | 830 | ) |
831 | 831 |
|
832 | | - ;; CHECK: (func $cast-desc-stronger-fallthrough-nullck-effects (type $14) (param $sub (ref null $sub)) (param $desc (ref $desc)) |
| 832 | + ;; CHECK: (func $cast-desc-stronger-fallthrough-nullck-effects (type $15) (param $sub (ref null $sub)) (param $desc (ref $desc)) |
833 | 833 | ;; CHECK-NEXT: (drop |
834 | 834 | ;; CHECK-NEXT: (ref.cast_desc (ref $struct) |
835 | 835 | ;; CHECK-NEXT: (block (result anyref) |
|
843 | 843 | ;; CHECK-NEXT: ) |
844 | 844 | ;; CHECK-NEXT: ) |
845 | 845 | ;; CHECK-NEXT: ) |
846 | | - ;; NTRAP: (func $cast-desc-stronger-fallthrough-nullck-effects (type $14) (param $sub (ref null $sub)) (param $desc (ref $desc)) |
| 846 | + ;; NTRAP: (func $cast-desc-stronger-fallthrough-nullck-effects (type $15) (param $sub (ref null $sub)) (param $desc (ref $desc)) |
847 | 847 | ;; NTRAP-NEXT: (local $2 (ref null $sub)) |
848 | 848 | ;; NTRAP-NEXT: (drop |
849 | 849 | ;; NTRAP-NEXT: (block (result (ref $sub)) |
|
883 | 883 | ) |
884 | 884 | ) |
885 | 885 |
|
886 | | - ;; CHECK: (func $cast-desc-stronger-fallthrough-null (type $15) (param $null nullref) (param $desc (ref $desc)) |
| 886 | + ;; CHECK: (func $cast-desc-stronger-fallthrough-null (type $16) (param $null nullref) (param $desc (ref $desc)) |
887 | 887 | ;; CHECK-NEXT: (drop |
888 | 888 | ;; CHECK-NEXT: (ref.null none) |
889 | 889 | ;; CHECK-NEXT: ) |
890 | 890 | ;; CHECK-NEXT: ) |
891 | | - ;; NTRAP: (func $cast-desc-stronger-fallthrough-null (type $15) (param $null nullref) (param $desc (ref $desc)) |
| 891 | + ;; NTRAP: (func $cast-desc-stronger-fallthrough-null (type $16) (param $null nullref) (param $desc (ref $desc)) |
892 | 892 | ;; NTRAP-NEXT: (drop |
893 | 893 | ;; NTRAP-NEXT: (ref.null none) |
894 | 894 | ;; NTRAP-NEXT: ) |
|
905 | 905 | ) |
906 | 906 | ) |
907 | 907 |
|
908 | | - ;; CHECK: (func $cast-desc-stronger-fallthrough-null-effects (type $15) (param $null nullref) (param $desc (ref $desc)) |
| 908 | + ;; CHECK: (func $cast-desc-stronger-fallthrough-null-effects (type $16) (param $null nullref) (param $desc (ref $desc)) |
909 | 909 | ;; CHECK-NEXT: (drop |
910 | 910 | ;; CHECK-NEXT: (block (result nullref) |
911 | 911 | ;; CHECK-NEXT: (drop |
|
924 | 924 | ;; CHECK-NEXT: ) |
925 | 925 | ;; CHECK-NEXT: ) |
926 | 926 | ;; CHECK-NEXT: ) |
927 | | - ;; NTRAP: (func $cast-desc-stronger-fallthrough-null-effects (type $15) (param $null nullref) (param $desc (ref $desc)) |
| 927 | + ;; NTRAP: (func $cast-desc-stronger-fallthrough-null-effects (type $16) (param $null nullref) (param $desc (ref $desc)) |
928 | 928 | ;; NTRAP-NEXT: (drop |
929 | 929 | ;; NTRAP-NEXT: (block (result nullref) |
930 | 930 | ;; NTRAP-NEXT: (drop |
|
959 | 959 | ) |
960 | 960 | ) |
961 | 961 |
|
962 | | - ;; CHECK: (func $cast-desc-stronger-fallthrough-null-null-desc (type $16) (param $null nullref) (param $desc (ref null $desc)) |
| 962 | + ;; CHECK: (func $cast-desc-stronger-fallthrough-null-null-desc (type $17) (param $null nullref) (param $desc (ref null $desc)) |
963 | 963 | ;; CHECK-NEXT: (drop |
964 | 964 | ;; CHECK-NEXT: (block (result nullref) |
965 | 965 | ;; CHECK-NEXT: (drop |
|
971 | 971 | ;; CHECK-NEXT: ) |
972 | 972 | ;; CHECK-NEXT: ) |
973 | 973 | ;; CHECK-NEXT: ) |
974 | | - ;; NTRAP: (func $cast-desc-stronger-fallthrough-null-null-desc (type $16) (param $null nullref) (param $desc (ref null $desc)) |
| 974 | + ;; NTRAP: (func $cast-desc-stronger-fallthrough-null-null-desc (type $17) (param $null nullref) (param $desc (ref null $desc)) |
975 | 975 | ;; NTRAP-NEXT: (drop |
976 | 976 | ;; NTRAP-NEXT: (ref.null none) |
977 | 977 | ;; NTRAP-NEXT: ) |
|
989 | 989 | ) |
990 | 990 | ) |
991 | 991 |
|
992 | | - ;; CHECK: (func $cast-desc-stronger-fallthrough-null-null-desc-effects (type $16) (param $null nullref) (param $desc (ref null $desc)) |
| 992 | + ;; CHECK: (func $cast-desc-stronger-fallthrough-null-null-desc-effects (type $17) (param $null nullref) (param $desc (ref null $desc)) |
993 | 993 | ;; CHECK-NEXT: (drop |
994 | 994 | ;; CHECK-NEXT: (block (result nullref) |
995 | 995 | ;; CHECK-NEXT: (drop |
|
1010 | 1010 | ;; CHECK-NEXT: ) |
1011 | 1011 | ;; CHECK-NEXT: ) |
1012 | 1012 | ;; CHECK-NEXT: ) |
1013 | | - ;; NTRAP: (func $cast-desc-stronger-fallthrough-null-null-desc-effects (type $16) (param $null nullref) (param $desc (ref null $desc)) |
| 1013 | + ;; NTRAP: (func $cast-desc-stronger-fallthrough-null-null-desc-effects (type $17) (param $null nullref) (param $desc (ref null $desc)) |
1014 | 1014 | ;; NTRAP-NEXT: (drop |
1015 | 1015 | ;; NTRAP-NEXT: (block (result nullref) |
1016 | 1016 | ;; NTRAP-NEXT: (drop |
|
1109 | 1109 | ) |
1110 | 1110 | ) |
1111 | 1111 |
|
1112 | | - ;; CHECK: (func $skip-non-null (type $20) (param $ref (ref null $struct)) (result anyref) |
| 1112 | + ;; CHECK: (func $ref.get_desc-skip-non-null (type $20) (param $ref (ref null $struct)) (result anyref) |
1113 | 1113 | ;; CHECK-NEXT: (ref.get_desc $struct |
1114 | 1114 | ;; CHECK-NEXT: (local.get $ref) |
1115 | 1115 | ;; CHECK-NEXT: ) |
1116 | 1116 | ;; CHECK-NEXT: ) |
1117 | | - ;; NTRAP: (func $skip-non-null (type $20) (param $ref (ref null $struct)) (result anyref) |
| 1117 | + ;; NTRAP: (func $ref.get_desc-skip-non-null (type $20) (param $ref (ref null $struct)) (result anyref) |
1118 | 1118 | ;; NTRAP-NEXT: (ref.get_desc $struct |
1119 | 1119 | ;; NTRAP-NEXT: (local.get $ref) |
1120 | 1120 | ;; NTRAP-NEXT: ) |
1121 | 1121 | ;; NTRAP-NEXT: ) |
1122 | | - (func $skip-non-null (param $ref (ref null $struct)) (result anyref) |
| 1122 | + (func $ref.get_desc-skip-non-null (param $ref (ref null $struct)) (result anyref) |
1123 | 1123 | (ref.get_desc $struct |
1124 | 1124 | ;; This is not needed, as the parent traps on null anyhow. |
1125 | 1125 | (ref.as_non_null |
1126 | 1126 | (local.get $ref) |
1127 | 1127 | ) |
1128 | 1128 | ) |
1129 | 1129 | ) |
| 1130 | + |
| 1131 | + ;; CHECK: (func $ref.get_desc-trap-on-null (type $10) (result anyref) |
| 1132 | + ;; CHECK-NEXT: (unreachable) |
| 1133 | + ;; CHECK-NEXT: ) |
| 1134 | + ;; NTRAP: (func $ref.get_desc-trap-on-null (type $10) (result anyref) |
| 1135 | + ;; NTRAP-NEXT: (unreachable) |
| 1136 | + ;; NTRAP-NEXT: ) |
| 1137 | + (func $ref.get_desc-trap-on-null (result anyref) |
| 1138 | + ;; This traps. |
| 1139 | + (ref.get_desc $struct |
| 1140 | + (block (result (ref null $struct)) |
| 1141 | + (ref.null $struct) |
| 1142 | + ) |
| 1143 | + ) |
| 1144 | + ) |
1130 | 1145 | ) |
0 commit comments