diff options
-rw-r--r-- | src/wasm/wasm-type.cpp | 9 | ||||
-rw-r--r-- | test/gtest/type-builder.cpp | 2 |
2 files changed, 5 insertions, 6 deletions
diff --git a/src/wasm/wasm-type.cpp b/src/wasm/wasm-type.cpp index 4fa7ff9d5..6b11ff95e 100644 --- a/src/wasm/wasm-type.cpp +++ b/src/wasm/wasm-type.cpp @@ -2676,11 +2676,8 @@ bool RecGroupEquator::topLevelEq(HeapType a, HeapType b) const { } bool RecGroupEquator::eq(Type a, Type b) const { - if (a == b) { - return true; - } if (a.isBasic() || b.isBasic()) { - return false; + return a == b; } return eq(*getTypeInfo(a), *getTypeInfo(b)); } @@ -2699,7 +2696,9 @@ bool RecGroupEquator::eq(HeapType a, HeapType b) const { } auto groupA = a.getRecGroup(); auto groupB = b.getRecGroup(); - return groupA == groupB || (groupA == newGroup && groupB == otherGroup); + bool selfRefA = groupA == newGroup; + bool selfRefB = groupB == otherGroup; + return (selfRefA && selfRefB) || (!selfRefA && !selfRefB && groupA == groupB); } bool RecGroupEquator::eq(const TypeInfo& a, const TypeInfo& b) const { diff --git a/test/gtest/type-builder.cpp b/test/gtest/type-builder.cpp index fe1f19871..8ba2a39d1 100644 --- a/test/gtest/type-builder.cpp +++ b/test/gtest/type-builder.cpp @@ -362,7 +362,7 @@ TEST_F(IsorecursiveTest, CanonicalizeUses) { EXPECT_NE(built[4], built[6]); } -TEST_F(IsorecursiveTest, DISABLED_CanonicalizeSelfReferences) { +TEST_F(IsorecursiveTest, CanonicalizeSelfReferences) { TypeBuilder builder(5); // Single self-reference builder[0] = makeStruct(builder, {0}); |