From 8f4fdb405a8470b9d06ab14ced120da89b213e82 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Mon, 7 Oct 2019 17:31:02 +0200 Subject: New loplugin:classmemaccess ...to complement and improve upon GCC's -Wclass-memaccess. See the comment at the head of compilerplugins/clang/classmemaccess.cxx for details. (It is not yet clear to me whether we would want to get this upstreamed into Clang.) 35d21e4bf6f66b3bbc7a44fcf184cb721b524a94 "Remove redundant memsets" was a case that benefited from looking through toplevel casts to void*. (Though the code in include/basic/sbxvar.hxx needs a slightly more verbose way to deliberately silence the warning now.) d03041e19215592f21ba1222d3cfa29e1f94260a "Drop bogus memsets" is one example of various cases that GCC -Wclass-memaccess failed to catch due to the use of array instead of pointer types. Change-Id: I6a9bfc34e3536834af35fdf4fb7ceeb31f31f8c0 Reviewed-on: https://gerrit.libreoffice.org/80421 Tested-by: Jenkins Reviewed-by: Stephan Bergmann --- include/basic/sbxvar.hxx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'include/basic') diff --git a/include/basic/sbxvar.hxx b/include/basic/sbxvar.hxx index 446f1fe4c1ec..270db0d137af 100644 --- a/include/basic/sbxvar.hxx +++ b/include/basic/sbxvar.hxx @@ -81,9 +81,10 @@ struct SbxValues 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(this), 0, offsetof(SbxValues, eType)); + // GCC 8 -Wclass-memaccess or loplugin:classmemaccess, and without having to turn the + // anonymous union into a non-anonymous one: + auto const p = static_cast(this); + std::memset(p, 0, offsetof(SbxValues, eType)); eType = type; } }; -- cgit