diff options
author | Clement Courbet <courbet@google.com> | 2024-03-07 21:01:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-07 21:01:46 +0100 |
commit | 308a2360725948fd6c77d005110c169ab1a8322c (patch) | |
tree | 841c2c8874f557c5e118197b9c8618b5d5b2d199 /clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp | |
parent | 57a337378f37fa3813992842714c9b06fae20af2 (diff) | |
download | llvm-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.cpp | 9 |
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: |