aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp
diff options
context:
space:
mode:
authorClement Courbet <courbet@google.com>2024-03-07 21:01:46 +0100
committerGitHub <noreply@github.com>2024-03-07 21:01:46 +0100
commit308a2360725948fd6c77d005110c169ab1a8322c (patch)
tree841c2c8874f557c5e118197b9c8618b5d5b2d199 /clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp
parent57a337378f37fa3813992842714c9b06fae20af2 (diff)
downloadllvm-308a2360725948fd6c77d005110c169ab1a8322c.zip
llvm-308a2360725948fd6c77d005110c169ab1a8322c.tar.gz
llvm-308a2360725948fd6c77d005110c169ab1a8322c.tar.bz2
[clang-tidy] `isOnlyUsedAsConst`: Handle static method calls. (#84005)
... using method syntax: ``` struct S { static void f() }; void DoIt(S& s) { s.f(); // Does not mutate `s` through the `this` parameter. } ```
Diffstat (limited to 'clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp')
-rw-r--r--clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp b/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp
index f0ffa51..a48e45e 100644
--- a/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp
+++ b/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp
@@ -155,15 +155,16 @@ AST_MATCHER_P(DeclRefExpr, doesNotMutateObject, int, Indirections) {
if (const auto *const Member = dyn_cast<MemberExpr>(P)) {
if (const auto *const Method =
dyn_cast<CXXMethodDecl>(Member->getMemberDecl())) {
- if (!Method->isConst()) {
- // The method can mutate our variable.
- return false;
+ if (Method->isConst() || Method->isStatic()) {
+ // The method call cannot mutate our variable.
+ continue;
}
- continue;
+ return false;
}
Stack.emplace_back(Member, 0);
continue;
}
+
if (const auto *const Op = dyn_cast<UnaryOperator>(P)) {
switch (Op->getOpcode()) {
case UO_AddrOf: