gcc/gcc9-pr89660.patch
Jakub Jelinek 843493ecf7 9.0.1-0.10
2019-03-12 10:17:52 +01:00

56 lines
1.9 KiB
Diff

2019-03-12 Jakub Jelinek <jakub@redhat.com>
PR c++/89660
Revert:
2019-03-06 Marek Polacek <polacek@redhat.com>
PR c++/87378 - bogus -Wredundant-move warning.
* typeck.c (maybe_warn_pessimizing_move): See if the maybe-rvalue
overload resolution would actually succeed.
* g++.dg/cpp0x/Wredundant-move1.C (fn4): Drop dg-warning.
--- gcc/cp/typeck.c (revision 269427)
+++ gcc/cp/typeck.c (revision 269426)
@@ -9429,24 +9429,10 @@ maybe_warn_pessimizing_move (tree retval
do maybe-rvalue overload resolution even without std::move. */
else if (treat_lvalue_as_rvalue_p (arg, /*parm_ok*/true))
{
- /* Make sure that the overload resolution would actually succeed
- if we removed the std::move call. */
- tree t = convert_for_initialization (NULL_TREE, functype,
- move (arg),
- (LOOKUP_NORMAL
- | LOOKUP_ONLYCONVERTING
- | LOOKUP_PREFER_RVALUE),
- ICR_RETURN, NULL_TREE, 0,
- tf_none);
- /* If this worked, implicit rvalue would work, so the call to
- std::move is redundant. */
- if (t != error_mark_node)
- {
- auto_diagnostic_group d;
- if (warning_at (loc, OPT_Wredundant_move,
- "redundant move in return statement"))
- inform (loc, "remove %<std::move%> call");
- }
+ auto_diagnostic_group d;
+ if (warning_at (loc, OPT_Wredundant_move,
+ "redundant move in return statement"))
+ inform (loc, "remove %<std::move%> call");
}
}
}
--- gcc/testsuite/g++.dg/cpp0x/Wredundant-move1.C (revision 269427)
+++ gcc/testsuite/g++.dg/cpp0x/Wredundant-move1.C (revision 269426)
@@ -59,8 +59,7 @@ T
fn4 (const T t)
{
// t is const: will decay into copy despite std::move, so it's redundant.
- // We used to warn about this, but no longer since c++/87378.
- return std::move (t);
+ return std::move (t); // { dg-warning "redundant move in return statement" }
}
int