From 31f3a713aec9a0dabebe4a9b0ef0047fbbccd119 Mon Sep 17 00:00:00 2001 From: Richard Trieu Date: Mon, 16 Dec 2013 21:41:30 +0000 Subject: [PATCH] Fix PR18260 - Make std::move handling in -Wconsumed only trigger on std::move llvm-svn: 197428 --- clang/lib/Analysis/Consumed.cpp | 3 ++- clang/test/SemaCXX/warn-consumed-analysis.cpp | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/clang/lib/Analysis/Consumed.cpp b/clang/lib/Analysis/Consumed.cpp index b33c8d8930f8..5e1448d0bf3c 100644 --- a/clang/lib/Analysis/Consumed.cpp +++ b/clang/lib/Analysis/Consumed.cpp @@ -611,7 +611,8 @@ void ConsumedStmtVisitor::VisitCallExpr(const CallExpr *Call) { // Special case for the std::move function. // TODO: Make this more specific. (Deferred) - if (FunDecl->getNameAsString() == "move") { + if (FunDecl->getQualifiedNameAsString() == "std::move" && + Call->getNumArgs() == 1) { forwardInfo(Call->getArg(0), Call); return; } diff --git a/clang/test/SemaCXX/warn-consumed-analysis.cpp b/clang/test/SemaCXX/warn-consumed-analysis.cpp index 64fdc00dc516..5297981ade1f 100644 --- a/clang/test/SemaCXX/warn-consumed-analysis.cpp +++ b/clang/test/SemaCXX/warn-consumed-analysis.cpp @@ -793,3 +793,22 @@ void testTemporariesAndOperators2() { } // end namespace InitializerAssertionFailTest + +namespace std { + void move(); + template + void move(T&&); +} + +namespace PR18260 { + class X { + public: + void move(); + } x; + + void test() { + x.move(); + std::move(); + std::move(x); + } +} // end namespace PR18260