[Libreoffice-commits] core.git: compilerplugins/clang
Stephan Bergmann
sbergman at redhat.com
Fri Jun 24 15:27:44 UTC 2016
compilerplugins/clang/weakobject.cxx | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
New commits:
commit e6daf6bfb0c3c3e3ba03c825d778436c369f19a3
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Fri Jun 24 17:27:18 2016 +0200
Fix check for calls to OWeakObject::release
Change-Id: I90030dee12676eb356ebe2244358052cfcd725de
diff --git a/compilerplugins/clang/weakobject.cxx b/compilerplugins/clang/weakobject.cxx
index 42bdf6e..cac13cd 100644
--- a/compilerplugins/clang/weakobject.cxx
+++ b/compilerplugins/clang/weakobject.cxx
@@ -106,16 +106,23 @@ public:
{
// note: this is only sometimes a CXXMethodDecl
FunctionDecl const*const pCalled(pCallExpr->getDirectCallee());
- if (pCalled->getName() == "release"
-//this never works && pCalled == pOverridden
- && (pCalled->getParent() == pOverridden->getParent()
- // allow this convenient shortcut
- || loplugin::TypeCheck(QualType(pMethodDecl->getParent()->getTypeForDecl(), 0)).Class("OWeakObject").Namespace("cppu")
- || loplugin::TypeCheck(QualType(pMethodDecl->getParent()->getTypeForDecl(), 0)).Class("OWeakAggObject").Namespace("cppu")))
+ if (pCalled->getName() == "release")
{
- return true;
+//this never works && pCalled == pOverridden
+ if (pCalled->getParent() == pOverridden->getParent())
+ {
+ return true;
+ }
+ // Allow this convenient shortcut:
+ auto td = dyn_cast<TypeDecl>(pCalled->getParent());
+ if (td != nullptr
+ && (loplugin::TypeCheck(QualType(td->getTypeForDecl(), 0)).Class("OWeakObject").Namespace("cppu")
+ || loplugin::TypeCheck(QualType(td->getTypeForDecl(), 0)).Class("OWeakAggObject").Namespace("cppu")))
+ {
+ return true;
+ }
}
- if (pCalled->getName() == "relase_ChildImpl") // FIXME remove this lunacy
+ else if (pCalled->getName() == "relase_ChildImpl") // FIXME remove this lunacy
{
return true;
}
More information about the Libreoffice-commits
mailing list