From: Richard Trieu Date: Mon, 18 May 2015 19:54:08 +0000 (+0000) Subject: Have -Wredundant-move ignore reference types. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=546816fb4dd0b7df8b6fc72f87e07da74dc48ef1;p=clang Have -Wredundant-move ignore reference types. Don't give a warning when the type being moved is a reference type. Also uncomment two lines in the test case. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@237607 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 7dd93e8de5..610e0a9a03 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -5831,6 +5831,9 @@ static void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, if (!VD || !VD->hasLocalStorage()) return; + if (!VD->getType()->isRecordType()) + return; + if (DiagID == 0) { DiagID = S.Context.hasSameUnqualifiedType(DestType, VD->getType()) ? diag::warn_pessimizing_move_on_return diff --git a/test/SemaCXX/warn-redundant-move.cpp b/test/SemaCXX/warn-redundant-move.cpp index 8469d4fa53..feb9e6f408 100644 --- a/test/SemaCXX/warn-redundant-move.cpp +++ b/test/SemaCXX/warn-redundant-move.cpp @@ -17,8 +17,8 @@ struct B : public A {}; A test1(B b1) { B b2; - //return b1; - //return b2; + return b1; + return b2; return std::move(b1); // expected-warning@-1{{redundant move}} // expected-note@-2{{remove std::move call}} @@ -66,3 +66,27 @@ C test2(A a1, B b1) { // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:10-[[@LINE-3]]:20}:"" // CHECK: fix-it:"{{.*}}":{[[@LINE-4]]:22-[[@LINE-4]]:23}:"" } + +// Copy of tests above with types changed to reference types. +A test3(B& b1) { + B& b2 = b1; + return b1; + return b2; + return std::move(b1); + return std::move(b2); +} + +C test4(A& a1, B& b1) { + A& a2 = a1; + B& b2 = b1; + + return a1; + return a2; + return b1; + return b2; + + return std::move(a1); + return std::move(a2); + return std::move(b1); + return std::move(b2); +}