diff options
Diffstat (limited to 'compilerplugins/clang/cow_wrapper.cxx')
-rw-r--r-- | compilerplugins/clang/cow_wrapper.cxx | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/compilerplugins/clang/cow_wrapper.cxx b/compilerplugins/clang/cow_wrapper.cxx index d5d1b47b3a43..073a4fa9fb89 100644 --- a/compilerplugins/clang/cow_wrapper.cxx +++ b/compilerplugins/clang/cow_wrapper.cxx @@ -21,7 +21,7 @@ /* Look for places where we are using cow_wrapper, but we are calling a const method on the impl object -with a non-const pointer, which means we will unnnecessarily trigger a copy. +with a non-const pointer, which means we will unnecessarily trigger a copy. */ namespace @@ -34,6 +34,8 @@ public: { } + bool shouldVisitTemplateInstantiations() const { return true; } + virtual bool preRun() override { return true; } virtual void run() override @@ -53,7 +55,7 @@ bool Cow_Wrapper::VisitCXXMemberCallExpr(const CXXMemberCallExpr* memberCallExpr if (!methodDecl || !methodDecl->isConst()) return true; - auto expr = compat::IgnoreImplicit(memberCallExpr->getImplicitObjectArgument())->IgnoreParens(); + auto expr = memberCallExpr->getImplicitObjectArgument()->IgnoreImplicit()->IgnoreParens(); auto operatorCallExpr = dyn_cast<CXXOperatorCallExpr>(expr); if (operatorCallExpr && operatorCallExpr->getOperator() == OO_Arrow) @@ -107,7 +109,7 @@ bool Cow_Wrapper::VisitCXXMemberCallExpr(const CXXMemberCallExpr* memberCallExpr report(DiagnosticsEngine::Warning, "calling const method on o3tl::cow_wrapper impl class via non-const pointer, rather use " "std::as_const to prevent triggering an unnecessary copy", - compat::getBeginLoc(memberCallExpr)) + memberCallExpr->getBeginLoc()) << memberCallExpr->getSourceRange(); return true; } |