summaryrefslogtreecommitdiffstats
path: root/include/basic
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2018-01-23 11:06:22 +0100
committerStephan Bergmann <sbergman@redhat.com>2018-01-23 19:54:06 +0100
commitad9871a5d1119593068f7e3a01d4249b4dff982a (patch)
tree70edfa451e9b739b3d01d5ad354c4bd8846b1ba0 /include/basic
parentAdapt to svtools/inc/langtab.hrc (diff)
downloadcore-ad9871a5d1119593068f7e3a01d4249b4dff982a.tar.gz
core-ad9871a5d1119593068f7e3a01d4249b4dff982a.zip
Introduce SbxValues::clear
...to avoid upcoming GCC 8 -Werror=class-memaccess ("clearing an object of non- trivial type ‘struct SbxValues’") Change-Id: Icf610e692b81030bfd6f2f940c43ee8bf6f1d4e0 Reviewed-on: https://gerrit.libreoffice.org/48389 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'include/basic')
-rw-r--r--include/basic/sbxvar.hxx12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/basic/sbxvar.hxx b/include/basic/sbxvar.hxx
index b189d4e32c26..1908ce83b73e 100644
--- a/include/basic/sbxvar.hxx
+++ b/include/basic/sbxvar.hxx
@@ -24,6 +24,9 @@
#include <com/sun/star/bridge/oleautomation/Decimal.hpp>
#include <basic/sbxcore.hxx>
#include <basic/basicdllapi.h>
+
+#include <cstddef>
+#include <cstring>
#include <memory>
@@ -71,6 +74,15 @@ struct SbxValues
SbxValues(): pData( nullptr ), eType(SbxEMPTY) {}
SbxValues( SbxDataType e ): eType(e) {}
SbxValues( double _nDouble ): nDouble( _nDouble ), eType(SbxDOUBLE) {}
+
+ void clear(SbxDataType type) {
+ // A hacky way of zeroing the union value corresponding to the given type (even though the
+ // relevant zero value need not be represented by all-zero bits, in general) without evoking
+ // GCC 8 -Wclass-memaccess, and without having to turn the anonymous union into a non-
+ // anonymous one:
+ std::memset(static_cast<void *>(this), 0, offsetof(SbxValues, eType));
+ eType = type;
+ }
};
class BASIC_DLLPUBLIC SbxValue : public SbxBase