https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103480
--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-11 branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>: https://gcc.gnu.org/g:cb4998fcdf2ad92fc6323fc4d9bc03299ca8a541 commit r11-9501-gcb4998fcdf2ad92fc6323fc4d9bc03299ca8a541 Author: Jakub Jelinek <ja...@redhat.com> Date: Wed Jan 12 09:47:46 2022 +0100 c++: Silence -Wuseless-cast warnings during move [PR103480] This is maybe just a shot in the dark, but IMHO we shouldn't be diagnosing -Wuseless-cast on casts the compiler adds on its own when calling its move function. We don't seem to warn when user calls std::move either. We call move on elinit (*NON_LVALUE_EXPR <(struct C[2] &&) &D.2497->b>)[0] so it is already an xvalue_p and try to static_cast it to struct C &&. But we don't warn e.g. on std::move (std::move (whatever)). Fixed by not doing the static cast and just returning expr from move if expr is already an xvalue. 2022-01-11 Jakub Jelinek <ja...@redhat.com> Jason Merrill <ja...@redhat.com> PR c++/103480 * tree.c (move): If expr is xvalue_p, just return expr without build_static_cast. * g++.dg/warn/Wuseless-cast2.C: New test. (cherry picked from commit 6bba184ccbf47368eaea27ee2c1e7b850526640b)