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> 2018-01-14 Jakub Jelinek <jakub@redhat.com>
* config.gcc (i[34567]86-*-*): Remove one duplicate gfniintrin.h * config.gcc (i[34567]86-*-*): Remove one duplicate gfniintrin.h
......
...@@ -2956,20 +2956,23 @@ C++17 it calls @code{f<void(*)()noexcept>}. ...@@ -2956,20 +2956,23 @@ C++17 it calls @code{f<void(*)()noexcept>}.
@item -Wclass-memaccess @r{(C++ and Objective-C++ only)} @item -Wclass-memaccess @r{(C++ and Objective-C++ only)}
@opindex Wclass-memaccess @opindex Wclass-memaccess
Warn when the destination of a call to a raw memory function such as 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 @code{memset} or @code{memcpy} is an object of class type, and when writing
might bypass the class non-trivial or deleted constructor or copy assignment, into such an object might bypass the class non-trivial or deleted constructor
violate const-correctness or encapsulation, or corrupt the virtual table. or copy assignment, violate const-correctness or encapsulation, or corrupt
Modifying the representation of such objects may violate invariants maintained the virtual table. Modifying the representation of such objects may violate
by member functions of the class. For example, the call to @code{memset} invariants maintained by member functions of the class. For example, the call
below is undefined because it modifies a non-trivial class object and is, to @code{memset} below is undefined because it modifies a non-trivial class
therefore, diagnosed. The safe way to either initialize or clear the storage object and is, therefore, diagnosed. The safe way to either initialize or
of objects of such types is by using the appropriate constructor or assignment clear the storage of objects of such types is by using the appropriate
operator, if one is available. constructor or assignment operator, if one is available.
@smallexample @smallexample
std::string str = "abc"; std::string str = "abc";
memset (&str, 0, 3); memset (&str, 0, sizeof str);
@end smallexample @end smallexample
The @option{-Wclass-memaccess} option is enabled by @option{-Wall}. 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)} @item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
@opindex Wnon-virtual-dtor @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