From 7842c3fceadaa1fcef7c91c59d822a572a17c8e2 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Sat, 18 Jul 2015 01:15:19 +0000 Subject: [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 --- clang/lib/Sema/SemaInit.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'clang/lib/Sema') 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(VD)) + DiagID = diag::warn_redundant_move_on_return; + if (DiagID == 0) { DiagID = S.Context.hasSameUnqualifiedType(DestType, VD->getType()) ? diag::warn_pessimizing_move_on_return -- cgit v1.2.3