diff options
author | Qizhi Hu <836744285@qq.com> | 2024-06-12 20:04:41 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-12 20:04:41 +0800 |
commit | 66a9e26438cbb5c547fd348a428ef3d1e775360c (patch) | |
tree | 0b0e623d02cff600ee2e81ce5ab0178630723db3 /clang/unittests/AST/StructuralEquivalenceTest.cpp | |
parent | 575e68e571b4524d613e29d6a4f176cab8224bdd (diff) | |
download | llvm-66a9e26438cbb5c547fd348a428ef3d1e775360c.zip llvm-66a9e26438cbb5c547fd348a428ef3d1e775360c.tar.gz llvm-66a9e26438cbb5c547fd348a428ef3d1e775360c.tar.bz2 |
[StructuralEquivalence] improve NTTP and CXXDependentScopeMemberExpr comparison (#95190)
improve `ASTStructuralEquivalenceTest`:
1. compare the depth and index of NTTP
2. provide comparison of `CXXDependentScopeMemberExpr` to `StmtCompare`.
Co-authored-by: huqizhi <836744285@qq.com>
Diffstat (limited to 'clang/unittests/AST/StructuralEquivalenceTest.cpp')
-rw-r--r-- | clang/unittests/AST/StructuralEquivalenceTest.cpp | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/clang/unittests/AST/StructuralEquivalenceTest.cpp b/clang/unittests/AST/StructuralEquivalenceTest.cpp index 91dd717..952c83b 100644 --- a/clang/unittests/AST/StructuralEquivalenceTest.cpp +++ b/clang/unittests/AST/StructuralEquivalenceTest.cpp @@ -1877,6 +1877,34 @@ TEST_F(StructuralEquivalenceCacheTest, VarDeclWithDifferentStorageClassNoEq) { EXPECT_FALSE(Ctx.IsEquivalent(Var.first, Var.second)); } +TEST_F(StructuralEquivalenceCacheTest, + NonTypeTemplateParmWithDifferentPositionNoEq) { + auto TU = makeTuDecls( + R"( + template<int T> + struct A { + template<int U> + void foo() {} + }; + )", + R"( + template<int U> + struct A { + template<int V, int T> + void foo() {} + }; + )", + Lang_CXX03); + + StructuralEquivalenceContext Ctx( + get<0>(TU)->getASTContext(), get<1>(TU)->getASTContext(), + NonEquivalentDecls, StructuralEquivalenceKind::Default, false, false); + + auto NTTP = findDeclPair<NonTypeTemplateParmDecl>( + TU, nonTypeTemplateParmDecl(hasName("T"))); + EXPECT_FALSE(Ctx.IsEquivalent(NTTP.first, NTTP.second)); +} + TEST_F(StructuralEquivalenceCacheTest, VarDeclWithInitNoEq) { auto TU = makeTuDecls( R"( @@ -2441,8 +2469,7 @@ TEST_F(StructuralEquivalenceStmtTest, NonTypeTemplateParm) { void foo(A<T, y>); )", Lang_CXX11); - // FIXME: These should not match, - EXPECT_TRUE(testStructuralMatch(t)); + EXPECT_FALSE(testStructuralMatch(t)); } TEST_F(StructuralEquivalenceStmtTest, UnresolvedLookupDifferentName) { @@ -2595,5 +2622,31 @@ TEST_F(StructuralEquivalenceStmtTest, DeclRefExpr) { EXPECT_FALSE(testStructuralMatch(t)); } +TEST_F(StructuralEquivalenceCacheTest, CXXDependentScopeMemberExprNoEq) { + auto S = makeStmts( + R"( + template <class T> + void foo() { + (void)T().x; + } + struct A { int x; }; + void bar() { + foo<A>(); + } + )", + R"( + template <class T> + void foo() { + (void)T().y; + } + struct A { int y; }; + void bar() { + foo<A>(); + } + )", + Lang_CXX11, cxxDependentScopeMemberExpr()); + EXPECT_FALSE(testStructuralMatch(S)); +} + } // end namespace ast_matchers } // end namespace clang |