[Libreoffice-commits] core.git: compilerplugins/clang include/vcl vcl/source

Noel Grandin noel.grandin at collabora.co.uk
Mon Jan 15 06:29:13 UTC 2018


 compilerplugins/clang/test/useuniqueptr.cxx |   12 ++++++++++++
 compilerplugins/clang/useuniqueptr.cxx      |    5 +++++
 include/vcl/cursor.hxx                      |    3 ++-
 vcl/source/window/cursor.cxx                |   15 +++++----------
 4 files changed, 24 insertions(+), 11 deletions(-)

New commits:
commit 397d5cbc3c04da7693e2e1f3e99b0d8e431bfff2
Author: Noel Grandin <noel.grandin at collabora.co.uk>
Date:   Fri Jan 12 08:22:39 2018 +0200

    loplugin:useuniqueptr in Cursor
    
    Change-Id: I5de300709409311b7a1d451ee1d314596cf2e879
    Reviewed-on: https://gerrit.libreoffice.org/47836
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/compilerplugins/clang/test/useuniqueptr.cxx b/compilerplugins/clang/test/useuniqueptr.cxx
index 43002ec59a68..ddd30c73ae62 100644
--- a/compilerplugins/clang/test/useuniqueptr.cxx
+++ b/compilerplugins/clang/test/useuniqueptr.cxx
@@ -112,4 +112,16 @@ class Foo9 {
             delete m_pbar3; // expected-error {{unconditional call to delete on a member, should be using std::unique_ptr [loplugin:useuniqueptr]}}
     }
 };
+// no warning expected
+class Foo10 {
+    XXX* m_pbar1;
+    ~Foo10()
+    {
+        if (m_pbar1 != getOther())
+        {
+            delete m_pbar1;
+        }
+    }
+    XXX* getOther() { return nullptr; }
+};
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/compilerplugins/clang/useuniqueptr.cxx b/compilerplugins/clang/useuniqueptr.cxx
index 99ef6928533e..c14d5fc5a57b 100644
--- a/compilerplugins/clang/useuniqueptr.cxx
+++ b/compilerplugins/clang/useuniqueptr.cxx
@@ -88,6 +88,8 @@ void UseUniquePtr::CheckForUnconditionalDelete(const CXXDestructorDecl* destruct
         {
             if (!isa<MemberExpr>(binaryOp->getLHS()->IgnoreImpCasts()))
                 continue;
+            if (!isa<CXXNullPtrLiteralExpr>(binaryOp->getRHS()->IgnoreImpCasts()))
+                continue;
         }
         else
             continue;
@@ -109,6 +111,9 @@ void UseUniquePtr::CheckForUnconditionalDelete(const CXXDestructorDecl* destruct
     }
 }
 
+/**
+ * Check the delete expression in a destructor.
+ */
 void UseUniquePtr::CheckDeleteExpr(const CXXDestructorDecl* destructorDecl, const CXXDeleteExpr* deleteExpr)
 {
     const ImplicitCastExpr* pCastExpr = dyn_cast<ImplicitCastExpr>(deleteExpr->getArgument());
diff --git a/include/vcl/cursor.hxx b/include/vcl/cursor.hxx
index b5c547f68463..0a0deb3e84bc 100644
--- a/include/vcl/cursor.hxx
+++ b/include/vcl/cursor.hxx
@@ -25,6 +25,7 @@
 #include <vcl/dllapi.h>
 #include <vcl/vclptr.hxx>
 #include <rtl/ustring.hxx>
+#include <memory>
 
 class Timer;
 struct ImplCursorData;
@@ -44,7 +45,7 @@ namespace vcl
 class VCL_DLLPUBLIC Cursor
 {
 private:
-    ImplCursorData* mpData;
+    std::unique_ptr<ImplCursorData> mpData;
     VclPtr<vcl::Window> mpWindow;           // only for shadow cursor
     long            mnSlant;
     Size            maSize;
diff --git a/vcl/source/window/cursor.cxx b/vcl/source/window/cursor.cxx
index 9f4d4a872d07..bfdfe67464e8 100644
--- a/vcl/source/window/cursor.cxx
+++ b/vcl/source/window/cursor.cxx
@@ -151,7 +151,7 @@ void vcl::Cursor::ImplDraw()
             mpData->maPixSize.Width() = pWindow->GetSettings().GetStyleSettings().GetCursorSize();
 
         // calculate output area and display
-        ImplCursorInvert( mpData );
+        ImplCursorInvert( mpData.get() );
         mpData->mbCurVisible = true;
     }
 }
@@ -160,7 +160,7 @@ void vcl::Cursor::ImplRestore()
 {
     assert( mpData && mpData->mbCurVisible );
 
-    ImplCursorInvert( mpData );
+    ImplCursorInvert( mpData.get() );
     mpData->mbCurVisible = false;
 }
 
@@ -185,7 +185,7 @@ void vcl::Cursor::ImplDoShow( bool bDrawDirect, bool bRestore )
         {
             if ( !mpData )
             {
-                mpData = new ImplCursorData;
+                mpData.reset( new ImplCursorData );
                 mpData->mbCurVisible = false;
                 mpData->maTimer.SetInvokeHandler( LINK( this, Cursor, ImplTimerHdl ) );
                 mpData->maTimer.SetDebugName( "vcl ImplCursorData maTimer" );
@@ -333,13 +333,8 @@ vcl::Cursor::Cursor( const Cursor& rCursor ) :
 
 vcl::Cursor::~Cursor()
 {
-    if ( mpData )
-    {
-        if ( mpData->mbCurVisible )
-            ImplRestore();
-
-        delete mpData;
-    }
+    if (mpData && mpData->mbCurVisible)
+        ImplRestore();
 }
 
 void vcl::Cursor::SetStyle( sal_uInt16 nStyle )


More information about the Libreoffice-commits mailing list