c++: Silence -Wuseless-cast warnings during move [PR103480]
authorJakub Jelinek <jakub@redhat.com>
Wed, 12 Jan 2022 08:47:46 +0000 (09:47 +0100)
committerJakub Jelinek <jakub@redhat.com>
Wed, 12 Jan 2022 08:47:46 +0000 (09:47 +0100)
commit6bba184ccbf47368eaea27ee2c1e7b850526640b
tree8fea1eaac85031e99470e88c42030a756b1ff7ed
parent7c3b9c17363bf30fcab9814252b9d5860711a10b
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  <jakub@redhat.com>
    Jason Merrill  <jason@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.
gcc/cp/tree.c
gcc/testsuite/g++.dg/warn/Wuseless-cast2.C [new file with mode: 0644]