summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tools/fuzzing/heap-types.cpp30
-rw-r--r--src/tools/wasm-fuzz-types.cpp4
-rw-r--r--test/lit/fuzz-types/nominal.test26
-rw-r--r--test/lit/fuzz-types/structural.test64
4 files changed, 48 insertions, 76 deletions
diff --git a/src/tools/fuzzing/heap-types.cpp b/src/tools/fuzzing/heap-types.cpp
index 71f701860..1878f5473 100644
--- a/src/tools/fuzzing/heap-types.cpp
+++ b/src/tools/fuzzing/heap-types.cpp
@@ -81,10 +81,9 @@ struct HeapTypeGenerator {
}
}
- // TODO: Create an enum for `Defaultable, NonDefaultable` in wasm-type.h.
- Type generateRefType(bool defaultable = false) {
+ Type generateRefType() {
auto heapType = generateHeapType();
- auto nullability = (defaultable || rand.oneIn(2)) ? Nullable : NonNullable;
+ auto nullability = rand.oneIn(2) ? Nullable : NonNullable;
return builder.getTempRefType(heapType, nullability);
}
@@ -94,12 +93,12 @@ struct HeapTypeGenerator {
return builder.getTempRttType(Rtt(depth, heapType));
}
- Type generateSingleType(bool defaultable = false) {
- switch (rand.upTo(defaultable ? 2 : 3)) {
+ Type generateSingleType() {
+ switch (rand.upTo(3)) {
case 0:
return generateBasicType();
case 1:
- return generateRefType(defaultable);
+ return generateRefType();
case 2:
return generateRttType();
}
@@ -109,21 +108,18 @@ struct HeapTypeGenerator {
Type generateTupleType() {
std::vector<Type> types(2 + rand.upTo(MAX_TUPLE_SIZE - 1));
for (auto& type : types) {
- // Make sure tuples are defaultable. See comment in
- // TranslateToFuzzReader::getTupleType.
- type = generateSingleType(/*defaultable=*/true);
+ type = generateSingleType();
}
return builder.getTempTupleType(Tuple(types));
}
Type generateReturnType() {
- // This is similar to TranslateToFuzzreader::getControlFlowType.
- if (rand.oneIn(10)) {
+ if (rand.oneIn(6)) {
return Type::none;
} else if (features.hasMultivalue() && rand.oneIn(5)) {
return generateTupleType();
} else {
- return generateSingleType(/*defaultable=*/true);
+ return generateSingleType();
}
}
@@ -313,17 +309,15 @@ struct HeapTypeGenerator {
}
Type generateSubtype(Type type) {
- if (type.isBasic()) {
- // We do not construct types with basic reference types (we go through the
- // TypeBuilder for those instead), so this must be a non-reference basic
- // type, which means it has no other subtypes.
- return type;
- } else if (type.isRef()) {
+ if (type.isRef()) {
auto ref = generateSubRef({type.getHeapType(), type.getNullability()});
return builder.getTempRefType(ref.type, ref.nullability);
} else if (type.isRtt()) {
auto rtt = generateSubRtt(type.getRtt());
return builder.getTempRttType(rtt);
+ } else if (type.isBasic()) {
+ // Non-reference basic types do not have subtypes.
+ return type;
} else {
WASM_UNREACHABLE("unexpected type kind");
}
diff --git a/src/tools/wasm-fuzz-types.cpp b/src/tools/wasm-fuzz-types.cpp
index 5df0c50ba..564bfa212 100644
--- a/src/tools/wasm-fuzz-types.cpp
+++ b/src/tools/wasm-fuzz-types.cpp
@@ -54,9 +54,9 @@ struct Fuzzer {
// TODO: Do some sort of checking or manipulation on the types
if (verbose) {
- std::cerr << "Built " << types.size() << " types:\n";
+ std::cout << "Built " << types.size() << " types:\n";
for (size_t i = 0; i < types.size(); ++i) {
- std::cerr << i << ": " << types[i] << "\n";
+ std::cout << i << ": " << types[i] << "\n";
}
}
}
diff --git a/test/lit/fuzz-types/nominal.test b/test/lit/fuzz-types/nominal.test
index 14dd80ac6..92bfaa4e1 100644
--- a/test/lit/fuzz-types/nominal.test
+++ b/test/lit/fuzz-types/nominal.test
@@ -1,24 +1,24 @@
-;; RUN: wasm-fuzz-types --nominal -v --seed=0
+;; RUN: wasm-fuzz-types --nominal -v --seed=0 | filecheck %s
;; CHECK: Running with seed 0
;; CHECK-NEXT: Built 20 types:
;; CHECK-NEXT: 0: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32)))
;; CHECK-NEXT: 1: (array (mut (ref null data)))
-;; CHECK-NEXT: 2: (func (result (ref null (func (result ...1 i32 (ref null (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32))))))) i32 (ref null (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32))))))
-;; CHECK-NEXT: 3: (func (result (ref null (func (result ...1 i32 (ref null (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32))))))) i32 (ref null (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32))))))
+;; CHECK-NEXT: 2: (func (result i64))
+;; CHECK-NEXT: 3: (func (result i64))
;; CHECK-NEXT: 4: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32)))
-;; CHECK-NEXT: 5: (func (result (ref null (func (result ...1 i32 (ref null (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32))))))) i32 (ref null (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32))))))
-;; CHECK-NEXT: 6: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32) (rtt (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32)))) (mut (ref null i31)) (mut dataref)))
+;; CHECK-NEXT: 5: (func (result i64))
+;; CHECK-NEXT: 6: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32)))
;; CHECK-NEXT: 7: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32)))
-;; CHECK-NEXT: 8: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32)))
-;; CHECK-NEXT: 9: (func (result (ref null ...1) i32 (ref null (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32))))))
-;; CHECK-NEXT: 10: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32)))
+;; CHECK-NEXT: 8: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32) (mut (rtt eq)) (rtt (func (result i64))) (mut (rtt (func (result i64)))) (mut i16)))
+;; CHECK-NEXT: 9: (func (result i64))
+;; CHECK-NEXT: 10: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32) (mut (rtt eq)) (rtt (func (result i64))) (mut (rtt (func (result i64)))) (mut i16)))
;; CHECK-NEXT: 11: (array (mut (ref null data)))
;; CHECK-NEXT: 12: (struct (field (ref ...1) (mut f32)))
-;; CHECK-NEXT: 13: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32) (rtt (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32)))) (mut (ref null i31)) (mut dataref)))
-;; CHECK-NEXT: 14: (func (result (ref null (func (result ...1 i32 (ref null (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32))))))) i32 (ref null (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32))))))
-;; CHECK-NEXT: 15: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32)))
-;; CHECK-NEXT: 16: (func (result (ref null (func (result ...1 i32 (ref null (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32))))))) i32 (ref null (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32))))))
+;; CHECK-NEXT: 13: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32) (rtt 2 (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32)))) (mut (rtt 1 eq)) (mut i31ref)))
+;; CHECK-NEXT: 14: (func (result i64))
+;; CHECK-NEXT: 15: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32) (mut (rtt eq)) (rtt (func (result i64))) (mut (rtt (func (result i64)))) (mut i16)))
+;; CHECK-NEXT: 16: (func (result i64))
;; CHECK-NEXT: 17: (array (mut (ref null data)))
;; CHECK-NEXT: 18: (array (mut (ref null data)))
-;; CHECK-NEXT: 19: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32)))
+;; CHECK-NEXT: 19: (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32) f64 eqref (mut (rtt 2 (struct (field (ref (struct (field ...1 (mut f32)))) (mut f32) (mut (rtt eq)) (rtt (func (result i64))) (mut (rtt (func (result i64)))) (mut i16)))))))
diff --git a/test/lit/fuzz-types/structural.test b/test/lit/fuzz-types/structural.test
index efb605740..ec3968466 100644
--- a/test/lit/fuzz-types/structural.test
+++ b/test/lit/fuzz-types/structural.test
@@ -1,47 +1,25 @@
-;; RUN: wasm-fuzz-types --structural -v --seed=0
+;; RUN: wasm-fuzz-types --structural -v --seed=0 | filecheck %s
-;; CHECK: Running with seed 0
-;; CHECK-NEXT: Built 20 types:
-;; CHECK-NEXT: 0: (struct (field anyref (mut f32)))
-;; CHECK-NEXT: 1: (func (result i64))
-;; CHECK-NEXT: 2: (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))
-;; CHECK-NEXT: 3: (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))
-;; CHECK-NEXT: 4: (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))
-;; CHECK-NEXT: 5: (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))
-;; CHECK-NEXT: 6: (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))
-;; CHECK-NEXT: 7: (struct (field anyref (mut f32)))
-;; CHECK-NEXT: 8: (struct (field anyref (mut f32) f64 i8 v128 (mut i8)))
-;; CHECK-NEXT: 9: (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))
-;; CHECK-NEXT: 10: (struct (field anyref (mut f32) (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))) (ref (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))) (rtt 1 (struct (field anyref (mut f32) (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq)) i16))) (ref (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))) ...1)))))
-;; CHECK-NEXT: 11: (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))
-;; CHECK-NEXT: 12: (struct (field anyref (mut f32) (mut (rtt 2 eq))))
-;; CHECK-NEXT: 13: (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))
-;; CHECK-NEXT: 14: (struct (field anyref (mut f32) (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq)) i16))) (ref (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))) (rtt 1 ...1)))
-;; CHECK-NEXT: 15: (func (result i64))
-;; CHECK-NEXT: 16: (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))
-;; CHECK-NEXT: 17: (struct (field anyref (mut f32) (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq)) i16))) (ref (struct (field (rtt 0 ...1) (ref (func (result i64))) (mut (ref null (struct (field anyref (mut f32))))) (mut i8) i64 (mut (ref null (struct (field anyref (mut f32) (mut (rtt 2 eq))))))))) (rtt 1 ...1)))
-;; CHECK-NEXT: 18: (struct (field anyref (mut f32) (mut (rtt 2 eq)) i16))
-;; CHECK-NEXT: 19: (func (result i64))
;; CHECK: Running with seed 0
;; CHECK-NEXT: Built 20 types:
-;; CHECK-NEXT: 0: (struct (field (ref null (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...3) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt (func (param (rtt 0 ...5))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...5) (ref ...3) (mut (ref (func (param (rtt 0 ...9))))) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref ...3))))) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 ...9))))) (rtt 1 ...5) (mut (ref ...7))))) ...3 (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 ...9))))) (rtt 1 ...5) (mut (ref ...7))))))))))))))
-;; CHECK-NEXT: 1: (func (param (rtt 0 (struct (field (ref null (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...3) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref ...7)) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt ...5)) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...5) (ref ...3) (mut (ref ...9)) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref ...3))))) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt ...9)) (rtt 1 ...5) (mut (ref ...7))))) ...3 (mut (ref ...7)) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt ...9)) (rtt 1 ...5) (mut (ref ...7)))))))))))))))))
-;; CHECK-NEXT: 2: (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref ...9)))))))) (rtt 1 ...5) (mut (ref (struct (field (ref null ...3) (ref ...7)))))))) (ref ...3) (mut (ref (func (param (rtt 0 (struct (field (ref null (struct (field (mut (ref func)) (mut ...7) i64 (mut (rtt ...5)) (rtt 1 ...9) (mut (ref ...3))))) (ref ...7)))))))) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref ...9)))))))) (rtt 1 ...5) (mut (ref (struct (field (ref null ...3) (ref ...7))))))))))))))
-;; CHECK-NEXT: 3: (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref ...9)))))))) (rtt 1 ...5) (mut (ref (struct (field (ref null ...3) (ref ...7)))))))) (ref ...3) (mut (ref (func (param (rtt 0 (struct (field (ref null (struct (field (mut (ref func)) (mut ...7) i64 (mut (rtt ...5)) (rtt 1 ...9) (mut (ref ...3))))) (ref ...7)))))))) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref ...9)))))))) (rtt 1 ...5) (mut (ref (struct (field (ref null ...3) (ref ...7))))))))))))))
-;; CHECK-NEXT: 4: (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref ...9)))))))) (rtt 1 ...5) (mut (ref (struct (field (ref null ...3) (ref ...7)))))))) (ref ...3) (mut (ref (func (param (rtt 0 (struct (field (ref null (struct (field (mut (ref func)) (mut ...7) i64 (mut (rtt ...5)) (rtt 1 ...9) (mut (ref ...3))))) (ref ...7)))))))) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref ...9)))))))) (rtt 1 ...5) (mut (ref (struct (field (ref null ...3) (ref ...7))))))))))))))
-;; CHECK-NEXT: 5: (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref ...9)))))))) (rtt 1 ...5) (mut (ref (struct (field (ref null ...3) (ref ...7)))))))) (ref ...3) (mut (ref (func (param (rtt 0 (struct (field (ref null (struct (field (mut (ref func)) (mut ...7) i64 (mut (rtt ...5)) (rtt 1 ...9) (mut (ref ...3))))) (ref ...7)))))))) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref ...9)))))))) (rtt 1 ...5) (mut (ref (struct (field (ref null ...3) (ref ...7))))))))))))))
-;; CHECK-NEXT: 6: (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...3) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut (ref func)) (mut ...7))))))))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...9) ...3 (mut (ref ...7)) (mut (rtt 2 ...3)) (rtt 2 ...9))))))))))))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...5) (ref ...3) (mut (ref (func (param (rtt 0 (struct (field (ref null ...9) (ref ...7)))))))) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref (struct (field (ref null ...3) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...7) ...3 (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 ...3)) (rtt 2 ...7))))))))))))))
-;; CHECK-NEXT: 7: (struct (field (ref null (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...3) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt (func (param (rtt 0 ...5))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...5) (ref ...3) (mut (ref (func (param (rtt 0 ...9))))) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref ...3))))) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 ...9))))) (rtt 1 ...5) (mut (ref ...7))))) ...3 (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 ...9))))) (rtt 1 ...5) (mut (ref ...7))))))))))))))
-;; CHECK-NEXT: 8: (struct (field (ref null (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...3) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt (func (param (rtt 0 ...5))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...5) (ref ...3) (mut (ref (func (param (rtt 0 ...9))))) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref ...3))))) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 ...9))))) (rtt 1 ...5) (mut (ref ...7))))) ...3 (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 ...9))))) (rtt 1 ...5) (mut (ref ...7))))))))))))))
-;; CHECK-NEXT: 9: (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...3) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut (ref func)) (mut ...7))))))))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...9) ...3 (mut (ref ...7)) (mut (rtt 2 ...3)) (rtt 2 ...9))))))))))))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...5) (ref ...3) (mut (ref (func (param (rtt 0 (struct (field (ref null ...9) (ref ...7)))))))) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref (struct (field (ref null ...3) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...7) ...3 (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 ...3)) (rtt 2 ...7))))))))))))))
-;; CHECK-NEXT: 10: (struct (field (ref (struct (field (mut (ref func)) (mut (ref ...3)) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut (ref func)) (mut (ref ...9)))))))))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref ...5))))) (mut (ref (struct (field (ref null ...3) (ref (struct (field (mut (ref func)) (mut (ref ...7)))))))))))) (ref (struct (field (mut (ref func)) (mut (ref ...3))))) (mut (ref (func (param (rtt 0 (struct (field (ref null (struct (field (mut (ref func)) (mut (ref ...7)) i64 (mut (rtt ...5)) (rtt 1 (struct (field (mut (ref func)) (mut (ref ...9))))) (mut (ref ...3))))) (ref (struct (field (mut (ref func)) (mut (ref ...7)))))))))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut (ref ...3)))))) (rtt 2 (struct (field (mut (ref func)) (mut (ref ...3)) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut (ref func)) (mut (ref ...9)))))))))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref ...5))))) (mut (ref (struct (field (ref null ...3) (ref (struct (field (mut (ref func)) (mut (ref ...7))))))))))))))
-;; CHECK-NEXT: 11: (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref ...9)))))))) (rtt 1 ...5) (mut (ref (struct (field (ref null ...3) (ref ...7)))))))) (ref ...3) (mut (ref (func (param (rtt 0 (struct (field (ref null (struct (field (mut (ref func)) (mut ...7) i64 (mut (rtt ...5)) (rtt 1 ...9) (mut (ref ...3))))) (ref ...7)))))))) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref ...9)))))))) (rtt 1 ...5) (mut (ref (struct (field (ref null ...3) (ref ...7))))))))))))))
-;; CHECK-NEXT: 12: (struct (field (ref null (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...3) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt (func (param (rtt 0 ...5))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...5) (ref ...3) (mut (ref (func (param (rtt 0 ...9))))) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref ...3))))) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 ...9))))) (rtt 1 ...5) (mut (ref ...7))))) ...3 (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 ...9))))) (rtt 1 ...5) (mut (ref ...7))))))))))))))
-;; CHECK-NEXT: 13: (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...3) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut (ref func)) (mut ...7))))))))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...9) ...3 (mut (ref ...7)) (mut (rtt 2 ...3)) (rtt 2 ...9))))))))))))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...5) (ref ...3) (mut (ref (func (param (rtt 0 (struct (field (ref null ...9) (ref ...7)))))))) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref (struct (field (ref null ...3) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...7) ...3 (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 ...3)) (rtt 2 ...7))))))))))))))
-;; CHECK-NEXT: 14: (struct (field (ref (struct (field (mut (ref func)) (mut (ref ...3)) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut (ref func)) (mut (ref ...9)))))))))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref ...5))))) (mut (ref (struct (field (ref null ...3) (ref (struct (field (mut (ref func)) (mut (ref ...7)))))))))))) (ref (struct (field (mut (ref func)) (mut (ref ...3))))) (mut (ref (func (param (rtt 0 (struct (field (ref null (struct (field (mut (ref func)) (mut (ref ...7)) i64 (mut (rtt ...5)) (rtt 1 (struct (field (mut (ref func)) (mut (ref ...9))))) (mut (ref ...3))))) (ref (struct (field (mut (ref func)) (mut (ref ...7)))))))))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut (ref ...3)))))) (rtt 2 (struct (field (mut (ref func)) (mut (ref ...3)) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut (ref func)) (mut (ref ...9)))))))))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref ...5))))) (mut (ref (struct (field (ref null ...3) (ref (struct (field (mut (ref func)) (mut (ref ...7))))))))))))))
-;; CHECK-NEXT: 15: (func (param (rtt 0 (struct (field (ref null (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...3) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref ...7)) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt ...5)) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...5) (ref ...3) (mut (ref ...9)) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref ...3))))) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt ...9)) (rtt 1 ...5) (mut (ref ...7))))) ...3 (mut (ref ...7)) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt ...9)) (rtt 1 ...5) (mut (ref ...7)))))))))))))))))
-;; CHECK-NEXT: 16: (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut (ref func)) (mut ...9))))))))))) (rtt 1 (struct (field (mut (ref func)) (mut ...5)))) (mut (ref (struct (field (ref null ...3) (ref (struct (field (mut (ref func)) (mut ...7))))))))))) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref (func (param (rtt 0 (struct (field (ref null (struct (field (mut (ref func)) (mut ...7) i64 (mut (rtt ...5)) (rtt 1 (struct (field (mut (ref func)) (mut ...9)))) (mut (ref ...3))))) (ref (struct (field (mut (ref func)) (mut ...7))))))))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut (ref func)) (mut ...9))))))))))) (rtt 1 (struct (field (mut (ref func)) (mut ...5)))) (mut (ref (struct (field (ref null ...3) (ref (struct (field (mut (ref func)) (mut ...7))))))))))))))) (mut (ref (struct (field (mut (ref func)) (mut (ref (struct (field ...3 (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref (func (param (rtt 0 (struct (field (ref null ...7) ..!))))))) (mut ..!) ..!)))) i64 (mut ..!) ..! (mut ..!)))))))
-;; CHECK-NEXT: 17: (struct (field (ref (struct (field (mut (ref func)) (mut (ref (struct (field ...3 (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut (ref func)) (mut ...7))))))))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut (ref func)) (mut (ref (struct (field ...9 ...3 (mut (ref ...7)) (mut (rtt 2 ...3)) (rtt 2 ...9))))))))))))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field ...5 (ref ...3) (mut (ref (func (param (rtt 0 (struct (field (ref null ...9) (ref ...7)))))))) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref (struct (field (ref null ...3) (ref (struct (field (mut (ref func)) (mut (ref (struct (field ...7 ...3 (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 ...3)) (rtt 2 ...7))))))))))))))) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) ..!))))))) ..! (mut ..!)))) ..! (mut ..!) (mut ..!) ..!))))))) (mut ..!) (mut ..!) ..! ..!))
-;; CHECK-NEXT: 18: (struct (field (ref null (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...3) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt (func (param (rtt 0 ...5))))) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...5) (ref ...3) (mut (ref (func (param (rtt 0 ...9))))) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref ...3))))) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 ...9))))) (rtt 1 ...5) (mut (ref ...7))))) ...3 (mut (ref (func (param (rtt 0 ...7))))) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt (func (param (rtt 0 ...9))))) (rtt 1 ...5) (mut (ref ...7))))))))))))))
-;; CHECK-NEXT: 19: (func (param (rtt 0 (struct (field (ref null (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...3) (ref (struct (field (mut (ref func)) (mut ...3)))) (mut (ref ...7)) (mut (rtt 2 (struct (field (mut (ref func)) (mut ...3))))) (rtt 2 ...3))))) i64 (mut (rtt ...5)) (rtt 1 (struct (field (mut (ref func)) (mut (ref (struct (field (ref ...5) (ref ...3) (mut (ref ...9)) (mut (rtt 2 ...3)) (rtt 2 ...5)))))))) (mut (ref ...3))))) (ref (struct (field (mut (ref func)) (mut (ref (struct (field (ref (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt ...9)) (rtt 1 ...5) (mut (ref ...7))))) ...3 (mut (ref ...7)) (mut (rtt 2 ...3)) (rtt 2 (struct (field (mut (ref func)) (mut ...3) i64 (mut (rtt ...9)) (rtt 1 ...5) (mut (ref ...7)))))))))))))))))
+;; CHECK-NEXT: 0: (struct (field (ref null (struct (field (mut (rtt (func (param (rtt 0 ...5))))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...7))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))) (mut f64)))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...5))))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...7))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))))))))
+;; CHECK-NEXT: 1: (func (param (rtt 0 (struct (field (ref null (struct (field (mut (rtt ...5)) (ref (struct (field (mut (rtt ...7)) ...1))) i32 (mut (ref null (struct (field (mut (rtt ...7)) (ref ...1))))) (mut f64)))) (ref (struct (field (mut (rtt ...5)) (ref (struct (field (mut (rtt ...7)) ...1))) i32 (mut (ref null (struct (field (mut (rtt ...7)) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut (rtt ...7)) (ref ...1)))))))))))))
+;; CHECK-NEXT: 2: (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref ...7) i32 (mut (ref null ...7)) (mut f64)))) (ref (struct (field (mut ...5) (ref ...7) i32 (mut (ref null ...7)) (mut f64) (mut (ref null ...7)))))))))))) (ref ...1)))
+;; CHECK-NEXT: 3: (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut ...7) (ref ...1))))))))))))))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64) (mut (ref null ...7)))))))))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) (ref ...7) i32 (mut ...7) (mut f64) (mut ...7))))))))))) (ref ...1))))) (mut f64)))
+;; CHECK-NEXT: 4: (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref ...7) i32 (mut (ref null ...7)) (mut f64)))) (ref (struct (field (mut ...5) (ref ...7) i32 (mut (ref null ...7)) (mut f64) (mut (ref null ...7)))))))))))) (ref ...1)))
+;; CHECK-NEXT: 5: (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64)))) (ref ...5)))))))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64)))) (ref ...7)))))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref ...7) i32 (mut ...7) (mut f64)))) (ref ...7)))))))) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref ...7) i32 (mut ...7) (mut f64)))) (ref ...7)))))))) (ref ...1)))))))
+;; CHECK-NEXT: 6: (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut ...7) (ref ...1))))))))))))))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64) (mut (ref null ...7)))))))))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) (ref ...7) i32 (mut ...7) (mut f64) (mut ...7))))))))))) (ref ...1))))) (mut f64)))
+;; CHECK-NEXT: 7: (struct (field (ref null (struct (field (mut (rtt (func (param (rtt 0 ...5))))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...7))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))) (mut f64)))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...5))))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...7))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))))))))
+;; CHECK-NEXT: 8: (struct (field (ref null (struct (field (mut (rtt (func (param (rtt 0 ...5))))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...7))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))) (mut f64)))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...5))))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...7))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))))))))
+;; CHECK-NEXT: 9: (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut ...7) (ref ...1))))))))))))))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64) (mut (ref null ...7)))))))))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) (ref ...7) i32 (mut ...7) (mut f64) (mut ...7))))))))))) (ref ...1))))) (mut f64)))
+;; CHECK-NEXT: 10: (struct (field (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut ...7) (ref ...1))))))))))))))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64) (mut (ref null ...7)))))))))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) (ref ...7) i32 (mut ...7) (mut f64) (mut ...7))))))))))) (ref ...1))))) (mut f64)))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64)))) ...5))))))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64)))) ...7))))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ..!) ..!))))))) ..!)))) (mut f64) (mut ..!)))) (mut i31ref)))
+;; CHECK-NEXT: 11: (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref ...7) i32 (mut (ref null ...7)) (mut f64)))) (ref (struct (field (mut ...5) (ref ...7) i32 (mut (ref null ...7)) (mut f64) (mut (ref null ...7)))))))))))) (ref ...1)))
+;; CHECK-NEXT: 12: (struct (field (ref null (struct (field (mut (rtt (func (param (rtt 0 ...5))))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...7))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))) (mut f64)))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...5))))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...7))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))))))))
+;; CHECK-NEXT: 13: (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64)))) (ref (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut ...7) (ref ...1))))))))))))))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64)))) (ref (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64) (mut (ref null ...7)))))))))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref ...7) i32 (mut ...7) (mut f64)))) (ref (struct (field (mut ...5) (ref ...7) i32 (mut ...7) (mut f64) (mut ...7))))))))))) (ref ...1))))) (mut f64) (ref null i31)))
+;; CHECK-NEXT: 14: (struct (field (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut ...7) (ref ...1))))))))))))))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64) (mut (ref null ...7)))))))))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) (ref ...7) i32 (mut ...7) (mut f64) (mut ...7))))))))))) (ref ...1))))) (mut f64)))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64)))) ...5))))))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64)))) ...7))))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ..!) ..!))))))) ..!)))) (mut f64) (mut ..!)))) (mut i31ref) i8))
+;; CHECK-NEXT: 15: (func (param (rtt 0 (struct (field (ref null (struct (field (mut (rtt ...5)) (ref (struct (field (mut (rtt ...7)) ...1))) i32 (mut (ref null (struct (field (mut (rtt ...7)) (ref ...1))))) (mut f64)))) (ref (struct (field (mut (rtt ...5)) (ref (struct (field (mut (rtt ...7)) ...1))) i32 (mut (ref null (struct (field (mut (rtt ...7)) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut (rtt ...7)) (ref ...1)))))))))))))
+;; CHECK-NEXT: 16: (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref ...7) i32 (mut (ref null ...7)) (mut f64)))) (ref (struct (field (mut ...5) (ref ...7) i32 (mut (ref null ...7)) (mut f64) (mut (ref null ...7)))))))))))) (ref ...1)))
+;; CHECK-NEXT: 17: (struct (field (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...5) (ref (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut ...7) (ref ...1))))))))))))))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64) (mut (ref null ...7)))))))))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ...7) (ref (struct (field (mut ...5) (ref ...7) i32 (mut ...7) (mut f64) (mut ...7))))))))))) (ref ...1))))) (mut f64)))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) (ref (struct (field (mut ...7) ...1))) i32 (mut (ref null (struct (field (mut ...7) (ref ...1))))) (mut f64)))) ...5))))))) (ref (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null (struct (field (mut ...5) ...7 i32 (mut (ref null ...7)) (mut f64)))) ...7))))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 (struct (field (ref null ..!) ..!))))))) ..!)))) (mut f64) (mut ..!)))) (mut i31ref) i8 (mut dataref) (mut i16)))
+;; CHECK-NEXT: 18: (struct (field (ref null (struct (field (mut (rtt (func (param (rtt 0 ...5))))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...7))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))) (mut f64)))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...5))))) (ref (struct (field (mut (rtt (func (param (rtt 0 ...7))))) ...1))) i32 (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut (rtt (func (param (rtt 0 ...7))))) (ref ...1))))))))))
+;; CHECK-NEXT: 19: (func (param (rtt 0 (struct (field (ref null (struct (field (mut (rtt ...5)) (ref (struct (field (mut (rtt ...7)) ...1))) i32 (mut (ref null (struct (field (mut (rtt ...7)) (ref ...1))))) (mut f64)))) (ref (struct (field (mut (rtt ...5)) (ref (struct (field (mut (rtt ...7)) ...1))) i32 (mut (ref null (struct (field (mut (rtt ...7)) (ref ...1))))) (mut f64) (mut (ref null (struct (field (mut (rtt ...7)) (ref ...1)))))))))))))