summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2015-07-18 01:15:19 +0000
committerDavide Italiano <davide@freebsd.org>2015-07-18 01:15:19 +0000
commit7842c3fceadaa1fcef7c91c59d822a572a17c8e2 (patch)
treee55503b0d4c4565f6d80c814b93ccd568e9803bd /clang/lib
parent857a43c70a95efbb76b5d90e38e166cf802507a5 (diff)
downloadbcm5719-llvm-7842c3fceadaa1fcef7c91c59d822a572a17c8e2.tar.gz
bcm5719-llvm-7842c3fceadaa1fcef7c91c59d822a572a17c8e2.zip
[Sema] Emit correct warning when copy-elision is not possible.
If we're returning a function parameter, copy elision isn't possible, so we now warn for redundant move. PR: 23819 Differential Revision: http://reviews.llvm.org/D11305 llvm-svn: 242600
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaInit.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index f0f7cb93d33..25d091f1d8c 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -5988,6 +5988,11 @@ static void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr,
if (!VD->getType()->isRecordType())
return;
+ // If we're returning a function parameter, copy elision
+ // is not possible.
+ if (isa<ParmVarDecl>(VD))
+ DiagID = diag::warn_redundant_move_on_return;
+
if (DiagID == 0) {
DiagID = S.Context.hasSameUnqualifiedType(DestType, VD->getType())
? diag::warn_pessimizing_move_on_return
OpenPOWER on IntegriCloud