|
211 | 211 | ;; CHECK-NEXT: (local $1 (ref (exact $sub.desc))) |
212 | 212 | ;; CHECK-NEXT: (block (result (ref (exact $sub.desc))) |
213 | 213 | ;; CHECK-NEXT: (drop |
214 | | - ;; CHECK-NEXT: (block (result (ref null $super)) |
| 214 | + ;; CHECK-NEXT: (block (result nullref) |
215 | 215 | ;; CHECK-NEXT: (block (result nullref) |
216 | 216 | ;; CHECK-NEXT: (local.set $1 |
217 | 217 | ;; CHECK-NEXT: (struct.new_default $sub.desc) |
|
1004 | 1004 | ) |
1005 | 1005 | ) |
1006 | 1006 | ) |
| 1007 | + |
| 1008 | +(module |
| 1009 | + (rec |
| 1010 | + (type $A (descriptor $B (struct))) |
| 1011 | + (type $B (sub (describes $A (struct)))) |
| 1012 | + ) |
| 1013 | + ;; CHECK: (type $0 (func)) |
| 1014 | + |
| 1015 | + ;; CHECK: (func $test (type $0) |
| 1016 | + ;; CHECK-NEXT: (local $0 (ref none)) |
| 1017 | + ;; CHECK-NEXT: (local $1 (ref none)) |
| 1018 | + ;; CHECK-NEXT: (block $block |
| 1019 | + ;; CHECK-NEXT: (drop |
| 1020 | + ;; CHECK-NEXT: (br_on_null $block |
| 1021 | + ;; CHECK-NEXT: (block (result (ref none)) |
| 1022 | + ;; CHECK-NEXT: (drop |
| 1023 | + ;; CHECK-NEXT: (block (result nullref) |
| 1024 | + ;; CHECK-NEXT: (local.set $1 |
| 1025 | + ;; CHECK-NEXT: (ref.as_non_null |
| 1026 | + ;; CHECK-NEXT: (ref.null none) |
| 1027 | + ;; CHECK-NEXT: ) |
| 1028 | + ;; CHECK-NEXT: ) |
| 1029 | + ;; CHECK-NEXT: (local.set $0 |
| 1030 | + ;; CHECK-NEXT: (local.get $1) |
| 1031 | + ;; CHECK-NEXT: ) |
| 1032 | + ;; CHECK-NEXT: (ref.null none) |
| 1033 | + ;; CHECK-NEXT: ) |
| 1034 | + ;; CHECK-NEXT: ) |
| 1035 | + ;; CHECK-NEXT: (local.get $0) |
| 1036 | + ;; CHECK-NEXT: ) |
| 1037 | + ;; CHECK-NEXT: ) |
| 1038 | + ;; CHECK-NEXT: ) |
| 1039 | + ;; CHECK-NEXT: (unreachable) |
| 1040 | + ;; CHECK-NEXT: ) |
| 1041 | + ;; CHECK-NEXT: ) |
| 1042 | + (func $test |
| 1043 | + ;; After removing the ref.get_desc, the null descriptor falls through, and |
| 1044 | + ;; we must update the br_on_null's type, or internal validation errors. |
| 1045 | + (block $block |
| 1046 | + (drop |
| 1047 | + (br_on_null $block |
| 1048 | + (ref.get_desc $A |
| 1049 | + (struct.new_default $A |
| 1050 | + (ref.null none) |
| 1051 | + ) |
| 1052 | + ) |
| 1053 | + ) |
| 1054 | + ) |
| 1055 | + (unreachable) |
| 1056 | + ) |
| 1057 | + ) |
| 1058 | +) |
0 commit comments