[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