diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-04-21 16:35:19 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-04-22 22:05:13 +0200 |
commit | 4d12bbef79b26d2c371d3b968690b46717c31045 (patch) | |
tree | e826842515a31d1fa39d1893a4d18fc01138981e /include/tools/ref.hxx | |
parent | 42b40ede8c496aad1021e68a72523af4f57e89f6 (diff) |
revert bits of "remove some old MSVC workarounds"
in commit 841e1a6f3619054ecc9240e061cd83d4e41d1ca9, since MSVC 2015
still does not pack heterogenous bitfields tightly
Change-Id: I251c797492762cbd2381496b2f2c6c3223d563c6
Reviewed-on: https://gerrit.libreoffice.org/36800
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'include/tools/ref.hxx')
-rw-r--r-- | include/tools/ref.hxx | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/include/tools/ref.hxx b/include/tools/ref.hxx index 5116c73bd5b5..bb32d486339e 100644 --- a/include/tools/ref.hxx +++ b/include/tools/ref.hxx @@ -122,21 +122,22 @@ class TOOLS_DLLPUBLIC SvRefBase // 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; - bool bNoDelete : 1; + // the only reason this is not bool is because MSVC cannot handle mixed type bitfields + unsigned int bNoDelete : 1; protected: virtual ~SvRefBase(); public: - SvRefBase() : nRefCount(0), bNoDelete(true) {} + SvRefBase() : nRefCount(0), bNoDelete(1) {} - SvRefBase(const SvRefBase &) : nRefCount(0), bNoDelete(true) {} + SvRefBase(const SvRefBase &) : nRefCount(0), bNoDelete(1) {} SvRefBase & operator = ( const SvRefBase & ) { return *this; } void RestoreNoDelete() - { bNoDelete = true; } + { bNoDelete = 1; } void AddNextRef() { @@ -148,7 +149,7 @@ public: { assert( nRefCount < (1 << 30) && "Do not add refs to dead objects" ); if( bNoDelete ) - bNoDelete = false; + bNoDelete = 0; ++nRefCount; } |