compilerplugins/clang/test/useuniqueptr.cxx | 10 ++++++++++ compilerplugins/clang/useuniqueptr.cxx | 13 +++++++++++-- connectivity/source/drivers/dbase/DIndex.cxx | 6 +----- connectivity/source/drivers/dbase/DIndexes.cxx | 4 ++-- connectivity/source/drivers/dbase/DTable.cxx | 6 ++---- connectivity/source/drivers/file/FTable.cxx | 10 ++++------ connectivity/source/inc/dbase/DIndex.hxx | 2 +- connectivity/source/inc/dbase/DTable.hxx | 2 +- connectivity/source/inc/file/FTable.hxx | 4 ++-- 9 files changed, 34 insertions(+), 23 deletions(-)
New commits: commit b66ba0f0f297f7190f8d969486e07ede52987188 Author: Noel Grandin <noel.gran...@collabora.co.uk> Date: Wed May 2 15:42:39 2018 +0200 make createStream_simpleError return std::unique_ptr Change-Id: Ifb10f9806eeb3a54f8ed11ec0e65f9465cac3c5d Reviewed-on: https://gerrit.libreoffice.org/53765 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/connectivity/source/drivers/dbase/DIndex.cxx b/connectivity/source/drivers/dbase/DIndex.cxx index e07402af2198..9468c3d3ad25 100644 --- a/connectivity/source/drivers/dbase/DIndex.cxx +++ b/connectivity/source/drivers/dbase/DIndex.cxx @@ -310,11 +310,7 @@ void ODbaseIndex::Release(bool bSave) void ODbaseIndex::closeImpl() { - if(m_pFileStream) - { - delete m_pFileStream; - m_pFileStream = nullptr; - } + m_pFileStream.reset(); } ONDXPage* ODbaseIndex::CreatePage(sal_uInt32 nPagePos, ONDXPage* pParent, bool bLoad) diff --git a/connectivity/source/drivers/dbase/DIndexes.cxx b/connectivity/source/drivers/dbase/DIndexes.cxx index ee6a12f1906d..643c67eeee40 100644 --- a/connectivity/source/drivers/dbase/DIndexes.cxx +++ b/connectivity/source/drivers/dbase/DIndexes.cxx @@ -52,7 +52,7 @@ sdbcx::ObjectType ODbaseIndexes::createObject(const OUString& _rName) } sdbcx::ObjectType xRet; - SvStream* pFileStream = ::connectivity::file::OFileTable::createStream_simpleError(sFile, StreamMode::READ | StreamMode::NOCREATE | StreamMode::SHARE_DENYWRITE); + std::unique_ptr<SvStream> pFileStream = ::connectivity::file::OFileTable::createStream_simpleError(sFile, StreamMode::READ | StreamMode::NOCREATE | StreamMode::SHARE_DENYWRITE); if(pFileStream) { pFileStream->SetEndian(SvStreamEndian::LITTLE); @@ -61,7 +61,7 @@ sdbcx::ObjectType ODbaseIndexes::createObject(const OUString& _rName) pFileStream->Seek(0); ReadHeader(*pFileStream, aHeader); - delete pFileStream; + pFileStream.reset(); ODbaseIndex* pIndex = new ODbaseIndex(m_pTable,aHeader,_rName); xRet = pIndex; diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx index 9bcec1816b39..87be422f133c 100644 --- a/connectivity/source/drivers/dbase/DTable.cxx +++ b/connectivity/source/drivers/dbase/DTable.cxx @@ -978,8 +978,7 @@ void ODbaseTable::FileClose() if (m_pMemoStream && m_pMemoStream->IsWritable()) m_pMemoStream->Flush(); - delete m_pMemoStream; - m_pMemoStream = nullptr; + m_pMemoStream.reset(); ODbaseTable_BASE::FileClose(); } @@ -1383,8 +1382,7 @@ bool ODbaseTable::CreateMemoFile(const INetURLObject& aFile) (*m_pMemoStream).WriteUInt32( 1 ); // pointer to the first free block m_pMemoStream->Flush(); - delete m_pMemoStream; - m_pMemoStream = nullptr; + m_pMemoStream.reset(); return true; } diff --git a/connectivity/source/drivers/file/FTable.cxx b/connectivity/source/drivers/file/FTable.cxx index 9ddadb19b86e..6358874f93f7 100644 --- a/connectivity/source/drivers/file/FTable.cxx +++ b/connectivity/source/drivers/file/FTable.cxx @@ -155,8 +155,7 @@ void OFileTable::FileClose() if (m_pFileStream && m_pFileStream->IsWritable()) m_pFileStream->Flush(); - delete m_pFileStream; - m_pFileStream = nullptr; + m_pFileStream.reset(); if (m_pBuffer) { @@ -191,13 +190,12 @@ void OFileTable::dropColumn(sal_Int32 /*_nPos*/) } -SvStream* OFileTable::createStream_simpleError( const OUString& _rFileName, StreamMode _eOpenMode) +std::unique_ptr<SvStream> OFileTable::createStream_simpleError( const OUString& _rFileName, StreamMode _eOpenMode) { - SvStream* pReturn = ::utl::UcbStreamHelper::CreateStream( _rFileName, _eOpenMode, bool(_eOpenMode & StreamMode::NOCREATE)); + std::unique_ptr<SvStream> pReturn(::utl::UcbStreamHelper::CreateStream( _rFileName, _eOpenMode, bool(_eOpenMode & StreamMode::NOCREATE))); if (pReturn && (ERRCODE_NONE != pReturn->GetErrorCode())) { - delete pReturn; - pReturn = nullptr; + pReturn.reset(); } return pReturn; } diff --git a/connectivity/source/inc/dbase/DIndex.hxx b/connectivity/source/inc/dbase/DIndex.hxx index 6e4356c4c3ee..bcb273aec506 100644 --- a/connectivity/source/inc/dbase/DIndex.hxx +++ b/connectivity/source/inc/dbase/DIndex.hxx @@ -68,7 +68,7 @@ namespace connectivity }; private: - SvStream* m_pFileStream; // Stream to read/write the index + std::unique_ptr<SvStream> m_pFileStream; // Stream to read/write the index NDXHeader m_aHeader; std::vector<ONDXPage*> m_aCollector; // Pool of obsolete pages diff --git a/connectivity/source/inc/dbase/DTable.hxx b/connectivity/source/inc/dbase/DTable.hxx index 962a66a48f63..1a1e45c64e99 100644 --- a/connectivity/source/inc/dbase/DTable.hxx +++ b/connectivity/source/inc/dbase/DTable.hxx @@ -107,7 +107,7 @@ namespace connectivity std::vector<sal_Int32> m_aRealFieldLengths; DBFHeader m_aHeader; DBFMemoHeader m_aMemoHeader; - SvStream* m_pMemoStream; + std::unique_ptr<SvStream> m_pMemoStream; rtl_TextEncoding m_eEncoding; void alterColumn(sal_Int32 index, diff --git a/connectivity/source/inc/file/FTable.hxx b/connectivity/source/inc/file/FTable.hxx index a13437a052fd..3495c79c24c9 100644 --- a/connectivity/source/inc/file/FTable.hxx +++ b/connectivity/source/inc/file/FTable.hxx @@ -39,7 +39,7 @@ namespace connectivity { protected: OConnection* m_pConnection; - SvStream* m_pFileStream; + std::unique_ptr<SvStream> m_pFileStream; ::rtl::Reference<OSQLColumns> m_aColumns; sal_Int32 m_nFilePos; // current IResultSetHelper::Movement sal_uInt8* m_pBuffer; @@ -100,7 +100,7 @@ namespace connectivity // creates a stream using ::utl::UcbStreamHelper::CreateStream, but the error is simplified // (NULL or non-NULL is returned) - static SvStream* createStream_simpleError( const OUString& _rFileName, StreamMode _eOpenMode); + static std::unique_ptr<SvStream> createStream_simpleError( const OUString& _rFileName, StreamMode _eOpenMode); }; } } commit ae680f7c7d45b7f6cff4dc458d5ad37c5f777948 Author: Noel Grandin <noel.gran...@collabora.co.uk> Date: Wed May 2 14:46:26 2018 +0200 make useuniqueptr loplugin check child compound statements where the child compound statement is unconditional Change-Id: I755e7ee9134bde81811a694d42a996d3eaae3fc2 Reviewed-on: https://gerrit.libreoffice.org/53763 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/compilerplugins/clang/test/useuniqueptr.cxx b/compilerplugins/clang/test/useuniqueptr.cxx index a68cea3201d0..8ef71175bb99 100644 --- a/compilerplugins/clang/test/useuniqueptr.cxx +++ b/compilerplugins/clang/test/useuniqueptr.cxx @@ -162,4 +162,14 @@ class Foo13 { DELETEZ(m_pbar2); // expected-error {{unconditional call to delete on a member, should be using std::unique_ptr [loplugin:useuniqueptr]}} } }; +// check for unconditional inner compound statements +class Foo14 { + int * m_pbar1; // expected-note {{member is here [loplugin:useuniqueptr]}} + ~Foo14() + { + { + delete m_pbar1; // expected-error {{unconditional call to delete on a member, should be using std::unique_ptr [loplugin:useuniqueptr]}} + } + } +}; /* 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 0aab2a644bfb..ce09b5873cbb 100644 --- a/compilerplugins/clang/useuniqueptr.cxx +++ b/compilerplugins/clang/useuniqueptr.cxx @@ -52,6 +52,7 @@ public: bool VisitCXXMethodDecl(const CXXMethodDecl* ); bool VisitCompoundStmt(const CompoundStmt* ); private: + void CheckCompoundStmt(const CXXMethodDecl*, const CompoundStmt* ); void CheckForUnconditionalDelete(const CXXMethodDecl*, const CompoundStmt* ); void CheckForSimpleDelete(const CXXMethodDecl*, const CompoundStmt* ); void CheckRangedLoopDelete(const CXXMethodDecl*, const CXXForRangeStmt* ); @@ -74,6 +75,13 @@ bool UseUniquePtr::VisitCXXMethodDecl(const CXXMethodDecl* methodDecl) if (!compoundStmt || compoundStmt->size() == 0) return true; + CheckCompoundStmt(methodDecl, compoundStmt); + + return true; +} + +void UseUniquePtr::CheckCompoundStmt(const CXXMethodDecl* methodDecl, const CompoundStmt* compoundStmt) +{ CheckForSimpleDelete(methodDecl, compoundStmt); for (auto i = compoundStmt->body_begin(); i != compoundStmt->body_end(); ++i) @@ -84,9 +92,10 @@ bool UseUniquePtr::VisitCXXMethodDecl(const CXXMethodDecl* methodDecl) CheckLoopDelete(methodDecl, forStmt->getBody()); else if (auto whileStmt = dyn_cast<WhileStmt>(*i)) CheckLoopDelete(methodDecl, whileStmt->getBody()); + // check for unconditional inner compound statements + else if (auto innerCompoundStmt = dyn_cast<CompoundStmt>(*i)) + CheckCompoundStmt(methodDecl, innerCompoundStmt); } - - return true; } /** _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits