[Bug c++/106276] Missing -Wpessimizing-move warning

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Aug 17 16:38:35 GMT 2022


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

--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:

https://gcc.gnu.org/g:8d22c7cb8b1a6f9b67c54a798dd5504244614e51

commit r13-2095-g8d22c7cb8b1a6f9b67c54a798dd5504244614e51
Author: Marek Polacek <polacek@redhat.com>
Date:   Mon Aug 1 17:02:23 2022 -0400

    c++: Extend -Wpessimizing-move to other contexts

    In my recent patch which enhanced -Wpessimizing-move so that it warns
    about class prvalues too I said that I'd like to extend it so that it
    warns in more contexts where a std::move can prevent copy elision, such
    as:

      T t = std::move(T());
      T t(std::move(T()));
      T t{std::move(T())};
      T t = {std::move(T())};
      void foo (T);
      foo (std::move(T()));

    This patch does that by adding two maybe_warn_pessimizing_move calls.
    These must happen before we've converted the initializers otherwise the
    std::move will be buried in a TARGET_EXPR.

            PR c++/106276

    gcc/cp/ChangeLog:

            * call.cc (build_over_call): Call maybe_warn_pessimizing_move.
            * cp-tree.h (maybe_warn_pessimizing_move): Declare.
            * decl.cc (build_aggr_init_full_exprs): Call
            maybe_warn_pessimizing_move.
            * typeck.cc (maybe_warn_pessimizing_move): Handle TREE_LIST and
            CONSTRUCTOR.  Add a bool parameter and use it.  Adjust a diagnostic
            message.
            (check_return_expr): Adjust the call to
maybe_warn_pessimizing_move.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp0x/Wpessimizing-move7.C: Add dg-warning.
            * g++.dg/cpp0x/Wpessimizing-move8.C: New test.


More information about the Gcc-bugs mailing list