From c5c8790122bf7e13543b5b94fa70f437288afc0c Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Fri, 18 Nov 2016 11:09:27 +0000 Subject: this is copied from SvRefBase, so copy the clang opt fix here too Change-Id: Ia3a2f086d66b5e15ddd4e7dcc600271d19e5d052 --- connectivity/source/drivers/dbase/dindexnode.cxx | 20 ++++++++------------ connectivity/source/inc/dbase/dindexnode.hxx | 4 +++- 2 files changed, 11 insertions(+), 13 deletions(-) (limited to 'connectivity') diff --git a/connectivity/source/drivers/dbase/dindexnode.cxx b/connectivity/source/drivers/dbase/dindexnode.cxx index 60521a069b2b..714ea8736781 100644 --- a/connectivity/source/drivers/dbase/dindexnode.cxx +++ b/connectivity/source/drivers/dbase/dindexnode.cxx @@ -56,7 +56,6 @@ ONDXKey::ONDXKey(const OUString& aStr, sal_uInt32 nRec) } } - ONDXKey::ONDXKey(double aVal, sal_uInt32 nRec) : ONDXKey_BASE(css::sdbc::DataType::DOUBLE) ,nRecord(nRec) @@ -64,24 +63,21 @@ ONDXKey::ONDXKey(double aVal, sal_uInt32 nRec) { } - // index page - ONDXPage::ONDXPage(ODbaseIndex& rInd, sal_uInt32 nPos, ONDXPage* pParent) - :bNoDelete(1) - ,nRefCount(0) - ,nPagePos(nPos) - ,bModified(false) - ,nCount(0) - ,aParent(pParent) - ,rIndex(rInd) - ,ppNodes(nullptr) + : nRefCount(0) + , bNoDelete(1) + , nPagePos(nPos) + , bModified(false) + , nCount(0) + , aParent(pParent) + , rIndex(rInd) + , ppNodes(nullptr) { sal_uInt16 nT = rIndex.getHeader().db_maxkeys; ppNodes = new ONDXNode[nT]; } - ONDXPage::~ONDXPage() { delete[] ppNodes; diff --git a/connectivity/source/inc/dbase/dindexnode.hxx b/connectivity/source/inc/dbase/dindexnode.hxx index 53d079c4c83a..ff73ce700099 100644 --- a/connectivity/source/inc/dbase/dindexnode.hxx +++ b/connectivity/source/inc/dbase/dindexnode.hxx @@ -115,9 +115,11 @@ namespace connectivity friend SvStream& WriteONDXPage(SvStream &rStream, const ONDXPage&); friend SvStream& operator >> (SvStream &rStream, ONDXPage&); + // work around a clang 3.5 optimization bug: if the bNoDelete is *first* + // it mis-compiles "if (--nRefCount == 0)" and never deletes any object + unsigned int nRefCount : 31; // the only reason this is not bool is because MSVC cannot handle mixed type bitfields unsigned int bNoDelete : 1; - unsigned int nRefCount : 31; sal_uInt32 nPagePos; // Position in the index file bool bModified : 1; sal_uInt16 nCount; -- cgit