martong added a comment. There is a third test which could be useful to test whether there is no faulty cache entries there:
+TEST_F(StructuralEquivalenceCacheTest, DISABLED_NonEq) { + auto Decls = + makeTuDecls( + R"( + class A {}; + class B { + int i; + }; + void x(A *); + void y(A *); + class C { + friend void x(A *); + friend void y(A *); + }; + )", + R"( + class A {}; + class B { + int i; + }; + void x(A *); + void y(B *); + class C { + friend void x(A *); + friend void y(B *); + }; + )", Lang_CXX); + + TranslationUnitDecl *TU1 = get<0>(Decls); + TranslationUnitDecl *TU2 = get<1>(Decls); + auto *C1 = LastDeclMatcher<CXXRecordDecl>().match( + TU1, cxxRecordDecl(hasName("C"), unless(isImplicit()))); + auto *C2 = LastDeclMatcher<CXXRecordDecl>().match( + TU2, cxxRecordDecl(hasName("C"), unless(isImplicit()))); + auto *x1 = + FirstDeclMatcher<FunctionDecl>().match(TU1, functionDecl(hasName("x"))); + auto *x2 = + FirstDeclMatcher<FunctionDecl>().match(TU2, functionDecl(hasName("x"))); + + llvm::DenseSet<std::pair<Decl *, Decl *>> NonEquivalentDecls; + { + StructuralEquivalenceContext Ctx( + C1->getASTContext(), C2->getASTContext(), NonEquivalentDecls, + StructuralEquivalenceKind::Default, false, false); + EXPECT_FALSE(Ctx.IsEquivalent(C1, C2)); + } + + // Reuse the cache. + { + StructuralEquivalenceContext Ctx( + C1->getASTContext(), C2->getASTContext(), NonEquivalentDecls, + StructuralEquivalenceKind::Default, false, false); + EXPECT_TRUE(Ctx.IsEquivalent(x1, x2)); + } +} Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66538/new/ https://reviews.llvm.org/D66538 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits