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
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
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}}
// 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);
+}