[PATCH] D66538: [AST] AST structural equivalence to work internally with pairs.
Aleksei Sidorin via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Aug 25 07:59:53 PDT 2019
a_sidorin added a comment.
Hello Balasz,
I have some comments inline.
================
Comment at: clang/lib/AST/ASTStructuralEquivalence.cpp:1579
+ D2 = D2->getCanonicalDecl();
+ std::pair<Decl *, Decl *> P = std::make_pair(D1, D2);
+
----------------
`std::pair<Decl *, Decl *> P{D1, D2}`?
================
Comment at: clang/lib/AST/ASTStructuralEquivalence.cpp:1888
- Decl *D2 = TentativeEquivalences[D1];
- assert(D2 && "Unrecorded tentative equivalence?");
+ Decl *D1 = P.first;
+ Decl *D2 = P.second;
----------------
I would prefer std::tie instead: `std::tie(D1, D2) = P;`. But it is a matter of taste.
================
Comment at: clang/unittests/AST/StructuralEquivalenceTest.cpp:1290
+ bool isInNonEqCache(std::tuple<NodeType *, NodeType *> D) {
+ return NonEquivalentDecls.find(std::make_pair(get<0>(D), get<1>(D))) !=
+ NonEquivalentDecls.end();
----------------
Can we use std::pair instead of std::tuple in this class? The size of tuple is known to be 2 and it will help to avoid such conversions.
================
Comment at: clang/unittests/AST/StructuralEquivalenceTest.cpp:1291
+ return NonEquivalentDecls.find(std::make_pair(get<0>(D), get<1>(D))) !=
+ NonEquivalentDecls.end();
+ }
----------------
`return NonEquivalentDecls.count({get<0>(D), get<1>(D)});`?
================
Comment at: clang/unittests/AST/StructuralEquivalenceTest.cpp:1314
+ bool Eq = Ctx.IsEquivalent(get<0>(X), get<1>(X));
+ EXPECT_FALSE(Eq);
+
----------------
It seems to me that the assertion will become a bit easier to read without an intermediate variable. What do you think?
================
Comment at: clang/unittests/AST/StructuralEquivalenceTest.cpp:1357
+
+ EXPECT_FALSE(isInNonEqCache(C));
+ EXPECT_FALSE(isInNonEqCache(findDeclPair<CXXRecordDecl>(
----------------
The declarations of C are not equivalent, but they are not placed into the non-equivalence cache. This looks strange to me, could you please explain this behavior?
================
Comment at: clang/unittests/AST/StructuralEquivalenceTest.cpp:1399
+ TU, cxxRecordDecl(hasName("A"), unless(isImplicit())))));
+ EXPECT_FALSE(isInNonEqCache(
+ findDeclPair<FunctionDecl>(TU, functionDecl(hasName("x")))));
----------------
We don't have any tests where isInNonEqCache() can return true. Is it expected?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D66538/new/
https://reviews.llvm.org/D66538
More information about the cfe-commits
mailing list