[PATCH] D48628: [AST] Structural equivalence of methods
Balázs Kéri via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 27 23:58:19 PDT 2018
balazske added inline comments.
================
Comment at: lib/AST/ASTStructuralEquivalence.cpp:873
+
+ if (auto *Constructor1 = dyn_cast<CXXConstructorDecl>(Method1)) {
+ if (auto *Constructor2 = dyn_cast<CXXConstructorDecl>(Method2)) {
----------------
a.sidorin wrote:
> ```if (Method1->getStmtKind() != Method2->getStmtKind())
> return false;```
> So we need to check only one declaration here and below.
What do you mean by getStmtKind? Probably getDeclKind? Anyway after the conversions it is good to check the pointers anyway, so there would be no big simplification.
================
Comment at: lib/AST/ASTStructuralEquivalence.cpp:892
+
+ if (Method1->isOverloadedOperator() && Method2->isOverloadedOperator()) {
+ if (Method1->getOverloadedOperator() != Method2->getOverloadedOperator())
----------------
a.sidorin wrote:
> These two lines look a bit strange to me. For example, should we return false if one of the methods is an overloaded operator and other one is not? I guess these conditions need to be swapped or written like this:
>
> ```
> if (Method1->getOverloadedOperator() != Method2->getOverloadedOperator())
> return false;
>
> const IdentifierInfo *Literal1 = Method1->getLiteralIdentifier();
> const IdentifierInfo *Literal2 = Method2->getLiteralIdentifier();
> if (!::IsStructurallyEquivalent(Literal1, Literal2))
> return false;
> ```
> omitting the first condition.
The single `if` with `getOverloadedOperator` should be enough. `getLiteralIdentifier` is not applicable for methods as far as I know (even if yes it is not related to the overloaded operator) (probably it is missing from check at `FunctionDecl`).
Repository:
rC Clang
https://reviews.llvm.org/D48628
More information about the cfe-commits
mailing list