[clang-tools-extra] [clang-tidy] `doesNotMutateObject`: Handle calls to member functions … (PR #94362)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 6 06:50:48 PDT 2024
================
@@ -36,6 +36,116 @@ void extractNodesByIdTo(ArrayRef<BoundNodes> Matches, StringRef ID,
Nodes.insert(Match.getNodeAs<Node>(ID));
}
+// Returns true if both types refer to the same type,
+// ignoring the const-qualifier.
+bool isSameTypeIgnoringConst(QualType A, QualType B) {
+ A = A.getCanonicalType();
+ B = B.getCanonicalType();
+ A.addConst();
+ B.addConst();
+ return A == B;
+}
+
+// Returns true if `D` and `O` have the same parameter types.
+bool hasSameParameterTypes(const CXXMethodDecl &D, const CXXMethodDecl &O) {
+ if (D.getNumParams() != O.getNumParams())
+ return false;
+ for (int I = 0, E = D.getNumParams(); I < E; ++I) {
+ if (!isSameTypeIgnoringConst(D.getParamDecl(I)->getType(),
+ O.getParamDecl(I)->getType()))
+ return false;
+ }
+ return true;
+}
+
+// If `D` has a const-qualified overload with otherwise identical
+// ref-qualifiers and parameter types, returns that overload.
+const CXXMethodDecl *findConstOverload(const CXXMethodDecl &D) {
+ assert(!D.isConst());
+
+ DeclContext::lookup_result LookupResult =
+ D.getParent()->lookup(D.getNameInfo().getName());
+ if (LookupResult.isSingleResult()) {
+ // No overload.
+ return nullptr;
+ }
+ for (const Decl *Overload : LookupResult) {
+ const CXXMethodDecl *O = dyn_cast<CXXMethodDecl>(Overload);
----------------
EugeneZelenko wrote:
```suggestion
const auto *O = dyn_cast<CXXMethodDecl>(Overload);
```
Type is spelled explicitly in same statement.
https://github.com/llvm/llvm-project/pull/94362
More information about the cfe-commits
mailing list