PR c++/80560 - warn on undefined memory operations involving non-trivial types
commita324786b4ded9047d05463b4bce9d238b6c6b3ef
authormsebor <msebor@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Jun 2017 03:48:59 +0000 (16 03:48 +0000)
committermsebor <msebor@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Jun 2017 03:48:59 +0000 (16 03:48 +0000)
tree921877ef9f69c6bac6285495a3eec052a4fad2a3
parent9b7a8b6e04736d71031e8746ca2d5d57367c4b0c
PR c++/80560 - warn on undefined memory operations involving non-trivial types

gcc/c-family/ChangeLog:

PR c++/80560
* c.opt (-Wclass-memaccess): New option.

gcc/cp/ChangeLog:

PR c++/80560
* call.c (first_non_public_field, maybe_warn_class_memaccess): New
functions.
(has_trivial_copy_assign_p, has_trivial_copy_p): Ditto.
(build_cxx_call): Call maybe_warn_class_memaccess.

gcc/ChangeLog:

PR c++/80560
* dumpfile.c (dump_register): Avoid calling memset to initialize
a class with a default ctor.
* gcc.c (struct compiler): Remove const qualification.
* genattrtab.c (gen_insn_reserv): Replace memset with initialization.
* hash-table.h: Ditto.
* ipa-cp.c (allocate_and_init_ipcp_value): Replace memset with
  assignment.
* ipa-prop.c (ipa_free_edge_args_substructures): Ditto.
* omp-low.c (lower_omp_ordered_clauses): Replace memset with
default ctor.
* params.h (struct param_info): Make struct members non-const.
* tree-switch-conversion.c (emit_case_bit_tests): Replace memset
with default initialization.
* vec.h (vec_copy_construct, vec_default_construct): New helper
functions.
(vec<T>::copy, vec<T>::splice, vec<T>::reserve): Replace memcpy
with vec_copy_construct.
(vect<T>::quick_grow_cleared): Replace memset with default ctor.
(vect<T>::vec_safe_grow_cleared, vec_safe_grow_cleared): Same.
* doc/invoke.texi (-Wclass-memaccess): Document.

libcpp/ChangeLog:

PR c++/80560
* line-map.c (line_maps::~line_maps): Avoid calling htab_delete
with a null pointer.
(linemap_init): Avoid calling memset on an object of a non-trivial
type.

libitm/ChangeLog:

PR c++/80560
* beginend.cc (GTM::gtm_thread::rollback): Avoid calling memset
on an object of a non-trivial type.
(GTM::gtm_transaction_cp::commit): Use assignment instead of memcpy
to copy an object.
* method-ml.cc (orec_iterator::reinit): Avoid -Wclass-memaccess.

gcc/testsuite/ChangeLog:

PR c++/80560
* g++.dg/Wclass-memaccess.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@249234 138bc75d-0d04-0410-961f-82ee72b054a4
21 files changed:
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c.opt
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/doc/invoke.texi
gcc/dumpfile.c
gcc/gcc.c
gcc/genattrtab.c
gcc/hash-table.h
gcc/ipa-cp.c
gcc/ipa-prop.c
gcc/omp-low.c
gcc/params.h
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/Wclass-memaccess.C [new file with mode: 0644]
gcc/tree-switch-conversion.c
gcc/vec.h
libcpp/line-map.c
libitm/beginend.cc
libitm/method-ml.cc