c++: Tweaks for -Wredundant-move [PR107363]
commitb305793b985f4d3e0032b04d446b8baabcb3e8b7
authorMarek Polacek <polacek@redhat.com>
Fri, 28 Oct 2022 17:39:40 +0000 (28 13:39 -0400)
committerMarek Polacek <polacek@redhat.com>
Wed, 9 Nov 2022 02:34:55 +0000 (8 21:34 -0500)
tree79711c34a349bd96e8a20274d774894bfbcd3d81
parent916bec9a05ea522c81381e0c93590d46965d9c7b
c++: Tweaks for -Wredundant-move [PR107363]

Two things here:

1) when we're pointing out that std::move on a constant object is
   redundant, don't say "in return statement" when we aren't in a
   return statement;
2) suppress the warning when the std::move call was dependent, because
   removing the std::move may not be correct for a different
   instantiation of the original template.

PR c++/107363

gcc/cp/ChangeLog:

* semantics.cc (finish_call_expr): Suppress OPT_Wpessimizing_move.
* typeck.cc (maybe_warn_pessimizing_move): Check warn_redundant_move
and warning_suppressed_p.  Adjust a message depending on return_p.
(check_return_expr): Don't suppress OPT_Wpessimizing_move here.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/Wredundant-move13.C: New test.
gcc/cp/semantics.cc
gcc/cp/typeck.cc
gcc/testsuite/g++.dg/cpp0x/Wredundant-move13.C [new file with mode: 0644]