https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80560

--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> ---
Author: msebor
Date: Fri Jun 16 03:48:59 2017
New Revision: 249234

URL: https://gcc.gnu.org/viewcvs?rev=249234&root=gcc&view=rev
Log:
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.

Added:
    trunk/gcc/testsuite/g++.dg/Wclass-memaccess.C
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/c-family/ChangeLog
    trunk/gcc/c-family/c.opt
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/call.c
    trunk/gcc/doc/invoke.texi
    trunk/gcc/dumpfile.c
    trunk/gcc/gcc.c
    trunk/gcc/genattrtab.c
    trunk/gcc/hash-table.h
    trunk/gcc/ipa-cp.c
    trunk/gcc/ipa-prop.c
    trunk/gcc/omp-low.c
    trunk/gcc/params.h
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-switch-conversion.c
    trunk/gcc/vec.h
    trunk/libcpp/line-map.c
    trunk/libitm/beginend.cc
    trunk/libitm/method-ml.cc

Reply via email to