Commit 656280b0 by Martin Sebor Committed by Martin Sebor

PR c++/81327 - cast to void* does not suppress -Wclass-memaccess

gcc/ChangeLog:
	PR c++/81327
	* doc/invoke.texi (-Wlass-memaccess): Document suppression by casting.

From-SVN: r256677
parent ba791a6c
2018-01-14 Martin Sebor <msebor@redhat.com>
PR c++/81327
* doc/invoke.texi (-Wlass-memaccess): Document suppression by casting.
2018-01-14 Jakub Jelinek <jakub@redhat.com>
* config.gcc (i[34567]86-*-*): Remove one duplicate gfniintrin.h
......
......@@ -2956,20 +2956,23 @@ C++17 it calls @code{f<void(*)()noexcept>}.
@item -Wclass-memaccess @r{(C++ and Objective-C++ only)}
@opindex Wclass-memaccess
Warn when the destination of a call to a raw memory function such as
@code{memset} or @code{memcpy} is an object of class type writing into which
might bypass the class non-trivial or deleted constructor or copy assignment,
violate const-correctness or encapsulation, or corrupt the virtual table.
Modifying the representation of such objects may violate invariants maintained
by member functions of the class. For example, the call to @code{memset}
below is undefined because it modifies a non-trivial class object and is,
therefore, diagnosed. The safe way to either initialize or clear the storage
of objects of such types is by using the appropriate constructor or assignment
operator, if one is available.
@code{memset} or @code{memcpy} is an object of class type, and when writing
into such an object might bypass the class non-trivial or deleted constructor
or copy assignment, violate const-correctness or encapsulation, or corrupt
the virtual table. Modifying the representation of such objects may violate
invariants maintained by member functions of the class. For example, the call
to @code{memset} below is undefined because it modifies a non-trivial class
object and is, therefore, diagnosed. The safe way to either initialize or
clear the storage of objects of such types is by using the appropriate
constructor or assignment operator, if one is available.
@smallexample
std::string str = "abc";
memset (&str, 0, 3);
memset (&str, 0, sizeof str);
@end smallexample
The @option{-Wclass-memaccess} option is enabled by @option{-Wall}.
Explicitly casting the pointer to the class object to @code{void *} or
to a type that can be safely accessed by the raw memory function suppresses
the warning.
@item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
@opindex Wnon-virtual-dtor
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment