summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/gtest/type-builder.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/gtest/type-builder.cpp b/test/gtest/type-builder.cpp
index 6da080b17..2a29d11b0 100644
--- a/test/gtest/type-builder.cpp
+++ b/test/gtest/type-builder.cpp
@@ -431,3 +431,29 @@ TEST_F(IsorecursiveTest, HeapTypeConstructors) {
EXPECT_EQ(struct_, struct2);
EXPECT_EQ(array, array2);
}
+
+TEST_F(IsorecursiveTest, CanonicalizeTypesBeforeSubtyping) {
+ TypeBuilder builder(6);
+ // A rec group
+ builder.createRecGroup(0, 2);
+ builder[0] = Struct{};
+ builder[1] = Struct{};
+ builder[1].subTypeOf(builder[0]);
+
+ // The same rec group again
+ builder.createRecGroup(2, 2);
+ builder[2] = Struct{};
+ builder[3] = Struct{};
+ builder[3].subTypeOf(builder[2]);
+
+ // This subtyping only validates if the previous two groups are deduplicated
+ // before checking subtype validity.
+ builder[4] =
+ Struct({Field(builder.getTempRefType(builder[0], Nullable), Immutable)});
+ builder[5] =
+ Struct({Field(builder.getTempRefType(builder[3], Nullable), Immutable)});
+ builder[5].subTypeOf(builder[4]);
+
+ auto result = builder.build();
+ EXPECT_TRUE(result);
+}