[clang-tools-extra] r267592 - [clang-tidy] Now adding correct misc-move-const-arg documentation ; ]

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 26 12:33:50 PDT 2016


Author: alexfh
Date: Tue Apr 26 14:33:49 2016
New Revision: 267592

URL: http://llvm.org/viewvc/llvm-project?rev=267592&view=rev
Log:
[clang-tidy] Now adding correct misc-move-const-arg documentation ;]

+ brushed the code a bit and renamed the test file to match the check name

Added:
    clang-tools-extra/trunk/test/clang-tidy/misc-move-const-arg.cpp
      - copied, changed from r267587, clang-tools-extra/trunk/test/clang-tidy/move-const-arg.cpp
Removed:
    clang-tools-extra/trunk/test/clang-tidy/move-const-arg.cpp
Modified:
    clang-tools-extra/trunk/clang-tidy/misc/MoveConstantArgumentCheck.cpp
    clang-tools-extra/trunk/docs/clang-tidy/checks/misc-move-const-arg.rst

Modified: clang-tools-extra/trunk/clang-tidy/misc/MoveConstantArgumentCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/MoveConstantArgumentCheck.cpp?rev=267592&r1=267591&r2=267592&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/misc/MoveConstantArgumentCheck.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/misc/MoveConstantArgumentCheck.cpp Tue Apr 26 14:33:49 2016
@@ -20,16 +20,15 @@ using namespace ast_matchers;
 void MoveConstantArgumentCheck::registerMatchers(MatchFinder *Finder) {
   if (!getLangOpts().CPlusPlus)
     return;
-  Finder->addMatcher(callExpr(unless(isInTemplateInstantiation()),
-                              callee(functionDecl(hasName("::std::move"))))
+  Finder->addMatcher(callExpr(callee(functionDecl(hasName("::std::move"))),
+                              argumentCountIs(1),
+                              unless(isInTemplateInstantiation()))
                          .bind("call-move"),
                      this);
 }
 
 void MoveConstantArgumentCheck::check(const MatchFinder::MatchResult &Result) {
   const auto *CallMove = Result.Nodes.getNodeAs<CallExpr>("call-move");
-  if (CallMove->getNumArgs() != 1)
-    return;
   const Expr *Arg = CallMove->getArg(0);
   SourceManager &SM = Result.Context->getSourceManager();
 
@@ -43,12 +42,12 @@ void MoveConstantArgumentCheck::check(co
     if (!FileMoveRange.isValid())
       return;
     bool IsVariable = isa<DeclRefExpr>(Arg);
-    auto Diag =
-        diag(FileMoveRange.getBegin(), "std::move of the %select{|const }0"
-                                       "%select{expression|variable}1 "
-                                       "%select{|of trivially-copyable type }2"
-                                       "has no effect; remove std::move()")
-        << IsConstArg << IsVariable << IsTriviallyCopyable;
+    auto Diag = diag(FileMoveRange.getBegin(),
+                     "std::move of the %select{|const }0"
+                     "%select{expression|variable}1 "
+                     "%select{|of a trivially-copyable type }2"
+                     "has no effect; remove std::move()")
+                << IsConstArg << IsVariable << IsTriviallyCopyable;
 
     auto BeforeArgumentsRange = Lexer::makeFileCharRange(
         CharSourceRange::getCharRange(CallMove->getLocStart(),

Modified: clang-tools-extra/trunk/docs/clang-tidy/checks/misc-move-const-arg.rst
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/misc-move-const-arg.rst?rev=267592&r1=267591&r2=267592&view=diff
==============================================================================
--- clang-tools-extra/trunk/docs/clang-tidy/checks/misc-move-const-arg.rst (original)
+++ clang-tools-extra/trunk/docs/clang-tidy/checks/misc-move-const-arg.rst Tue Apr 26 14:33:49 2016
@@ -3,13 +3,13 @@
 misc-move-const-arg
 ===================
 
-The check warns if the result of ``std::move(x)`` is bound to a constant
-reference argument, e.g.:
+The check warns if ``std::move()`` is called with a constant argument or an
+argument of a trivially-copyable type, e.g.:
 
 .. code:: c++
 
-  void f(const string&);
-  void g() {
-    string s;
-    F(std::move(s));  // Warning here. std::move() is not moving anything.
-  }
+  const string s;
+  return std::move(s);  // Warning: std::move of the const variable has no effect
+
+  int x;
+  return std::move(x);  // Warning: std::move of the variable of a trivially-copyable type has no effect

Copied: clang-tools-extra/trunk/test/clang-tidy/misc-move-const-arg.cpp (from r267587, clang-tools-extra/trunk/test/clang-tidy/move-const-arg.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/misc-move-const-arg.cpp?p2=clang-tools-extra/trunk/test/clang-tidy/misc-move-const-arg.cpp&p1=clang-tools-extra/trunk/test/clang-tidy/move-const-arg.cpp&r1=267587&r2=267592&rev=267592&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/move-const-arg.cpp (original)
+++ clang-tools-extra/trunk/test/clang-tidy/misc-move-const-arg.cpp Tue Apr 26 14:33:49 2016
@@ -1,4 +1,4 @@
-// RUN: %check_clang_tidy %s misc-move-const-arg %t -- -- -std=c++11
+// RUN: %check_clang_tidy %s misc-move-const-arg %t
 
 namespace std {
 template <typename> struct remove_reference;
@@ -23,19 +23,19 @@ public:
 
 int f1() {
   return std::move(42);
-  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: std::move of the expression of trivially-copyable type has no effect; remove std::move() [misc-move-const-arg]
+  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: std::move of the expression of a trivially-copyable type has no effect; remove std::move() [misc-move-const-arg]
   // CHECK-FIXES: return 42;
 }
 
 int f2(int x2) {
   return std::move(x2);
-  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: std::move of the variable of trivially-copyable type
+  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: std::move of the variable of a trivially-copyable type
   // CHECK-FIXES: return x2;
 }
 
 int *f3(int *x3) {
   return std::move(x3);
-  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: std::move of the variable of trivially-copyable type
+  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: std::move of the variable of a trivially-copyable type
   // CHECK-FIXES: return x3;
 }
 

Removed: clang-tools-extra/trunk/test/clang-tidy/move-const-arg.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/move-const-arg.cpp?rev=267591&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/move-const-arg.cpp (original)
+++ clang-tools-extra/trunk/test/clang-tidy/move-const-arg.cpp (removed)
@@ -1,73 +0,0 @@
-// RUN: %check_clang_tidy %s misc-move-const-arg %t -- -- -std=c++11
-
-namespace std {
-template <typename> struct remove_reference;
-
-template <typename _Tp> struct remove_reference { typedef _Tp type; };
-
-template <typename _Tp> struct remove_reference<_Tp &> { typedef _Tp type; };
-
-template <typename _Tp> struct remove_reference<_Tp &&> { typedef _Tp type; };
-
-template <typename _Tp>
-constexpr typename std::remove_reference<_Tp>::type &&move(_Tp &&__t);
-
-} // namespace std
-
-class A {
-public:
-  A() {}
-  A(const A &rhs) {}
-  A(A &&rhs) {}
-};
-
-int f1() {
-  return std::move(42);
-  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: std::move of the expression of trivially-copyable type has no effect; remove std::move() [misc-move-const-arg]
-  // CHECK-FIXES: return 42;
-}
-
-int f2(int x2) {
-  return std::move(x2);
-  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: std::move of the variable of trivially-copyable type
-  // CHECK-FIXES: return x2;
-}
-
-int *f3(int *x3) {
-  return std::move(x3);
-  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: std::move of the variable of trivially-copyable type
-  // CHECK-FIXES: return x3;
-}
-
-A f4(A x4) { return std::move(x4); }
-
-A f5(const A x5) {
-  return std::move(x5);
-  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: std::move of the const variable
-  // CHECK-FIXES: return x5;
-}
-
-template <typename T> T f6(const T x6) { return std::move(x6); }
-
-void f7() { int a = f6(10); }
-
-#define M1(x) x
-void f8() {
-  const A a;
-  M1(A b = std::move(a);)
-  // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: std::move of the const variable
-  // CHECK-FIXES: M1(A b = a;)
-}
-
-#define M2(x) std::move(x)
-int f9() { return M2(1); }
-
-template <typename T> T f10(const int x10) {
-  return std::move(x10);
-  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: std::move of the const variable
-  // CHECK-FIXES: return x10;
-}
-void f11() {
-  f10<int>(1);
-  f10<double>(1);
-}




More information about the cfe-commits mailing list