diff options
-rw-r--r-- | compilerplugins/clang/useuniqueptr.cxx | 62 | ||||
-rw-r--r-- | store/source/storbios.cxx | 11 | ||||
-rw-r--r-- | store/source/storbios.hxx | 2 |
3 files changed, 36 insertions, 39 deletions
diff --git a/compilerplugins/clang/useuniqueptr.cxx b/compilerplugins/clang/useuniqueptr.cxx index 5d00c1a637e8..192ae50a4eba 100644 --- a/compilerplugins/clang/useuniqueptr.cxx +++ b/compilerplugins/clang/useuniqueptr.cxx @@ -46,40 +46,40 @@ public: TraverseDecl(compiler.getASTContext().getTranslationUnitDecl()); } - bool VisitCXXDestructorDecl(const CXXDestructorDecl* ); + bool VisitCXXMethodDecl(const CXXMethodDecl* ); bool VisitCompoundStmt(const CompoundStmt* ); private: - void CheckForUnconditionalDelete(const CXXDestructorDecl*, const CompoundStmt* ); - void CheckForSimpleDelete(const CXXDestructorDecl*, const CompoundStmt* ); - void CheckRangedLoopDelete(const CXXDestructorDecl*, const CXXForRangeStmt* ); - void CheckLoopDelete(const CXXDestructorDecl*, const Stmt* ); - void CheckLoopDelete(const CXXDestructorDecl*, const CXXDeleteExpr* ); - void CheckDeleteExpr(const CXXDestructorDecl*, const CXXDeleteExpr*); - void CheckDeleteExpr(const CXXDestructorDecl*, const CXXDeleteExpr*, + void CheckForUnconditionalDelete(const CXXMethodDecl*, const CompoundStmt* ); + void CheckForSimpleDelete(const CXXMethodDecl*, const CompoundStmt* ); + void CheckRangedLoopDelete(const CXXMethodDecl*, const CXXForRangeStmt* ); + void CheckLoopDelete(const CXXMethodDecl*, const Stmt* ); + void CheckLoopDelete(const CXXMethodDecl*, const CXXDeleteExpr* ); + void CheckDeleteExpr(const CXXMethodDecl*, const CXXDeleteExpr*); + void CheckDeleteExpr(const CXXMethodDecl*, const CXXDeleteExpr*, const MemberExpr*, StringRef message); }; -bool UseUniquePtr::VisitCXXDestructorDecl(const CXXDestructorDecl* destructorDecl) +bool UseUniquePtr::VisitCXXMethodDecl(const CXXMethodDecl* methodDecl) { - if (ignoreLocation(destructorDecl)) + if (ignoreLocation(methodDecl)) return true; - if (isInUnoIncludeFile(destructorDecl)) + if (isInUnoIncludeFile(methodDecl)) return true; - const CompoundStmt* compoundStmt = dyn_cast_or_null< CompoundStmt >( destructorDecl->getBody() ); + const CompoundStmt* compoundStmt = dyn_cast_or_null< CompoundStmt >( methodDecl->getBody() ); if (!compoundStmt || compoundStmt->size() == 0) return true; - CheckForSimpleDelete(destructorDecl, compoundStmt); + CheckForSimpleDelete(methodDecl, compoundStmt); for (auto i = compoundStmt->body_begin(); i != compoundStmt->body_end(); ++i) { if (auto cxxForRangeStmt = dyn_cast<CXXForRangeStmt>(*i)) - CheckRangedLoopDelete(destructorDecl, cxxForRangeStmt); + CheckRangedLoopDelete(methodDecl, cxxForRangeStmt); else if (auto forStmt = dyn_cast<ForStmt>(*i)) - CheckLoopDelete(destructorDecl, forStmt->getBody()); + CheckLoopDelete(methodDecl, forStmt->getBody()); else if (auto whileStmt = dyn_cast<WhileStmt>(*i)) - CheckLoopDelete(destructorDecl, whileStmt->getBody()); + CheckLoopDelete(methodDecl, whileStmt->getBody()); } return true; @@ -88,14 +88,14 @@ bool UseUniquePtr::VisitCXXDestructorDecl(const CXXDestructorDecl* destructorDec /** * check for simple call to delete in a destructor i.e. direct unconditional call, or if-guarded call */ -void UseUniquePtr::CheckForSimpleDelete(const CXXDestructorDecl* destructorDecl, const CompoundStmt* compoundStmt) +void UseUniquePtr::CheckForSimpleDelete(const CXXMethodDecl* methodDecl, const CompoundStmt* compoundStmt) { for (auto i = compoundStmt->body_begin(); i != compoundStmt->body_end(); ++i) { auto deleteExpr = dyn_cast<CXXDeleteExpr>(*i); if (deleteExpr) { - CheckDeleteExpr(destructorDecl, deleteExpr); + CheckDeleteExpr(methodDecl, deleteExpr); continue; } // Check for conditional deletes like: @@ -125,7 +125,7 @@ void UseUniquePtr::CheckForSimpleDelete(const CXXDestructorDecl* destructorDecl, deleteExpr = dyn_cast<CXXDeleteExpr>(ifStmt->getThen()); if (deleteExpr) { - CheckDeleteExpr(destructorDecl, deleteExpr); + CheckDeleteExpr(methodDecl, deleteExpr); continue; } @@ -136,7 +136,7 @@ void UseUniquePtr::CheckForSimpleDelete(const CXXDestructorDecl* destructorDecl, { auto ifDeleteExpr = dyn_cast<CXXDeleteExpr>(*j); if (ifDeleteExpr) - CheckDeleteExpr(destructorDecl, ifDeleteExpr); + CheckDeleteExpr(methodDecl, ifDeleteExpr); } } } @@ -144,7 +144,7 @@ void UseUniquePtr::CheckForSimpleDelete(const CXXDestructorDecl* destructorDecl, /** * Check the delete expression in a destructor. */ -void UseUniquePtr::CheckDeleteExpr(const CXXDestructorDecl* destructorDecl, const CXXDeleteExpr* deleteExpr) +void UseUniquePtr::CheckDeleteExpr(const CXXMethodDecl* methodDecl, const CXXDeleteExpr* deleteExpr) { const ImplicitCastExpr* castExpr = dyn_cast<ImplicitCastExpr>(deleteExpr->getArgument()); if (!castExpr) @@ -152,14 +152,14 @@ void UseUniquePtr::CheckDeleteExpr(const CXXDestructorDecl* destructorDecl, cons const MemberExpr* memberExpr = dyn_cast<MemberExpr>(castExpr->getSubExpr()); if (!memberExpr) return; - CheckDeleteExpr(destructorDecl, deleteExpr, memberExpr, + CheckDeleteExpr(methodDecl, deleteExpr, memberExpr, "unconditional call to delete on a member, should be using std::unique_ptr"); } /** * Check the delete expression in a destructor. */ -void UseUniquePtr::CheckDeleteExpr(const CXXDestructorDecl* destructorDecl, const CXXDeleteExpr* deleteExpr, +void UseUniquePtr::CheckDeleteExpr(const CXXMethodDecl* methodDecl, const CXXDeleteExpr* deleteExpr, const MemberExpr* memberExpr, StringRef message) { // ignore union games @@ -171,7 +171,7 @@ void UseUniquePtr::CheckDeleteExpr(const CXXDestructorDecl* destructorDecl, cons return; // ignore calling delete on someone else's field - if (fieldDecl->getParent() != destructorDecl->getParent() ) + if (fieldDecl->getParent() != methodDecl->getParent() ) return; if (ignoreLocation(fieldDecl)) @@ -240,21 +240,21 @@ void UseUniquePtr::CheckDeleteExpr(const CXXDestructorDecl* destructorDecl, cons << fieldDecl->getSourceRange(); } -void UseUniquePtr::CheckLoopDelete(const CXXDestructorDecl* destructorDecl, const Stmt* bodyStmt) +void UseUniquePtr::CheckLoopDelete(const CXXMethodDecl* methodDecl, const Stmt* bodyStmt) { if (auto deleteExpr = dyn_cast<CXXDeleteExpr>(bodyStmt)) - CheckLoopDelete(destructorDecl, deleteExpr); + CheckLoopDelete(methodDecl, deleteExpr); else if (auto compoundStmt = dyn_cast<CompoundStmt>(bodyStmt)) { for (auto i = compoundStmt->body_begin(); i != compoundStmt->body_end(); ++i) { if (auto deleteExpr = dyn_cast<CXXDeleteExpr>(*i)) - CheckLoopDelete(destructorDecl, deleteExpr); + CheckLoopDelete(methodDecl, deleteExpr); } } } -void UseUniquePtr::CheckLoopDelete(const CXXDestructorDecl* destructorDecl, const CXXDeleteExpr* deleteExpr) +void UseUniquePtr::CheckLoopDelete(const CXXMethodDecl* methodDecl, const CXXDeleteExpr* deleteExpr) { const MemberExpr* memberExpr = nullptr; const Expr* subExpr = deleteExpr->getArgument(); @@ -280,10 +280,10 @@ void UseUniquePtr::CheckLoopDelete(const CXXDestructorDecl* destructorDecl, cons if (!memberExpr) return; - CheckDeleteExpr(destructorDecl, deleteExpr, memberExpr, "rather manage with std::some_container<std::unique_ptr<T>>"); + CheckDeleteExpr(methodDecl, deleteExpr, memberExpr, "rather manage with std::some_container<std::unique_ptr<T>>"); } -void UseUniquePtr::CheckRangedLoopDelete(const CXXDestructorDecl* destructorDecl, const CXXForRangeStmt* cxxForRangeStmt) +void UseUniquePtr::CheckRangedLoopDelete(const CXXMethodDecl* methodDecl, const CXXForRangeStmt* cxxForRangeStmt) { CXXDeleteExpr const * deleteExpr = nullptr; if (auto compoundStmt = dyn_cast<CompoundStmt>(cxxForRangeStmt->getBody())) @@ -299,7 +299,7 @@ void UseUniquePtr::CheckRangedLoopDelete(const CXXDestructorDecl* destructorDecl if (!fieldDecl) return; - CheckDeleteExpr(destructorDecl, deleteExpr, memberExpr, "rather manage with std::some_container<std::unique_ptr<T>>"); + CheckDeleteExpr(methodDecl, deleteExpr, memberExpr, "rather manage with std::some_container<std::unique_ptr<T>>"); } bool UseUniquePtr::VisitCompoundStmt(const CompoundStmt* compoundStmt) diff --git a/store/source/storbios.cxx b/store/source/storbios.cxx index 38673f7b8165..1a34da60d420 100644 --- a/store/source/storbios.cxx +++ b/store/source/storbios.cxx @@ -591,10 +591,9 @@ storeError OStorePageBIOS::initialize_Impl ( if (eAccessMode != storeAccessMode::Create) { // Load SuperBlock page. - if ((m_pSuper = new SuperBlockPage()) == nullptr) - return store_E_OutOfMemory; + m_pSuper.reset(new SuperBlockPage()); - eErrCode = read (0, m_pSuper, SuperBlockPage::theSize); + eErrCode = read (0, m_pSuper.get(), SuperBlockPage::theSize); if (eErrCode == store_E_None) { // Verify SuperBlock page (with repair). @@ -630,8 +629,7 @@ storeError OStorePageBIOS::initialize_Impl ( rnPageSize = ((rnPageSize + STORE_MINIMUM_PAGESIZE - 1) & ~(STORE_MINIMUM_PAGESIZE - 1)); // Create initial page (w/ SuperBlock). - if ((m_pSuper = new(rnPageSize) SuperBlockPage(rnPageSize)) == nullptr) - return store_E_OutOfMemory; + m_pSuper.reset(new(rnPageSize) SuperBlockPage(rnPageSize)); eErrCode = m_pSuper->save (*this, rnPageSize); } if (eErrCode == store_E_None) @@ -670,8 +668,7 @@ void OStorePageBIOS::cleanup_Impl() } // Release SuperBlock page. - delete m_pSuper; - m_pSuper = nullptr; + m_pSuper.reset(); // Release PageCache. m_xCache.clear(); diff --git a/store/source/storbios.hxx b/store/source/storbios.hxx index bea29f9f37fa..8c2abd54f5a7 100644 --- a/store/source/storbios.hxx +++ b/store/source/storbios.hxx @@ -120,7 +120,7 @@ private: rtl::Reference<ILockBytes> m_xLockBytes; osl::Mutex m_aMutex; - SuperBlockPage * m_pSuper; + std::unique_ptr<SuperBlockPage> m_pSuper; bool m_bWriteable; |