1
1
#include " clang/AST/ASTContext.h"
2
2
#include " clang/AST/ASTStructuralEquivalence.h"
3
+ #include " clang/AST/Decl.h"
3
4
#include " clang/AST/DeclTemplate.h"
4
5
#include " clang/ASTMatchers/ASTMatchers.h"
5
6
#include " clang/Frontend/ASTUnit.h"
@@ -1801,10 +1802,10 @@ TEST_F(StructuralEquivalenceCacheTest, SimpleNonEq) {
1801
1802
TEST_F (StructuralEquivalenceCacheTest, ReturnStmtNonEq) {
1802
1803
auto TU = makeTuDecls (
1803
1804
R"(
1804
- bool x(){ return true; }
1805
+ bool x() { return true; }
1805
1806
)" ,
1806
1807
R"(
1807
- bool x(){ return false; }
1808
+ bool x() { return false; }
1808
1809
)" ,
1809
1810
Lang_CXX03);
1810
1811
@@ -1817,6 +1818,60 @@ TEST_F(StructuralEquivalenceCacheTest, ReturnStmtNonEq) {
1817
1818
1818
1819
}
1819
1820
1821
+ TEST_F (StructuralEquivalenceCacheTest, VarDeclNoEq) {
1822
+ auto TU = makeTuDecls (
1823
+ R"(
1824
+ int p;
1825
+ )" ,
1826
+ R"(
1827
+ int q;
1828
+ )" ,
1829
+ Lang_CXX03);
1830
+
1831
+ StructuralEquivalenceContext Ctx (
1832
+ get<0 >(TU)->getASTContext (), get<1 >(TU)->getASTContext (),
1833
+ NonEquivalentDecls, StructuralEquivalenceKind::Default, false , false );
1834
+
1835
+ auto Var = findDeclPair<VarDecl>(TU, varDecl ());
1836
+ EXPECT_FALSE (Ctx.IsEquivalent (Var.first , Var.second ));
1837
+ }
1838
+
1839
+ TEST_F (StructuralEquivalenceCacheTest, VarDeclWithDifferentStorageClassNoEq) {
1840
+ auto TU = makeTuDecls (
1841
+ R"(
1842
+ int p;
1843
+ )" ,
1844
+ R"(
1845
+ static int p;
1846
+ )" ,
1847
+ Lang_CXX03);
1848
+
1849
+ StructuralEquivalenceContext Ctx (
1850
+ get<0 >(TU)->getASTContext (), get<1 >(TU)->getASTContext (),
1851
+ NonEquivalentDecls, StructuralEquivalenceKind::Default, false , false );
1852
+
1853
+ auto Var = findDeclPair<VarDecl>(TU, varDecl ());
1854
+ EXPECT_FALSE (Ctx.IsEquivalent (Var.first , Var.second ));
1855
+ }
1856
+
1857
+ TEST_F (StructuralEquivalenceCacheTest, VarDeclWithInitNoEq) {
1858
+ auto TU = makeTuDecls (
1859
+ R"(
1860
+ int p = 1;
1861
+ )" ,
1862
+ R"(
1863
+ int p = 2;
1864
+ )" ,
1865
+ Lang_CXX03);
1866
+
1867
+ StructuralEquivalenceContext Ctx (
1868
+ get<0 >(TU)->getASTContext (), get<1 >(TU)->getASTContext (),
1869
+ NonEquivalentDecls, StructuralEquivalenceKind::Default, false , false );
1870
+
1871
+ auto Var = findDeclPair<VarDecl>(TU, varDecl ());
1872
+ EXPECT_FALSE (Ctx.IsEquivalent (Var.first , Var.second ));
1873
+ }
1874
+
1820
1875
TEST_F (StructuralEquivalenceCacheTest, SpecialNonEq) {
1821
1876
auto TU = makeTuDecls (
1822
1877
R"(
@@ -2320,5 +2375,23 @@ TEST_F(StructuralEquivalenceStmtTest, UnresolvedLookup) {
2320
2375
EXPECT_TRUE (testStructuralMatch (t));
2321
2376
}
2322
2377
2378
+ TEST_F (StructuralEquivalenceCacheTest, GotoStmtNoEq) {
2379
+ auto S = makeStmts (
2380
+ R"(
2381
+ void foo() {
2382
+ goto L1;
2383
+ L1: foo();
2384
+ }
2385
+ )" ,
2386
+ R"(
2387
+ void foo() {
2388
+ goto L2;
2389
+ L2: foo();
2390
+ }
2391
+ )" ,
2392
+ Lang_CXX03, gotoStmt ());
2393
+ EXPECT_FALSE (testStructuralMatch (S));
2394
+ }
2395
+
2323
2396
} // end namespace ast_matchers
2324
2397
} // end namespace clang
0 commit comments