Disable part of the misc-move-constructor-init checker when the check is enabled through cert-oop11-cpp. The CERT guideline does not cover moveable parameters as part of the OOP11-CPP recommendation, just copy construction from move constructors.

llvm-svn: 257177
diff --git a/clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp b/clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp
index ba182f3..eeebcf6 100644
--- a/clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp
@@ -42,7 +42,8 @@
                                                    ClangTidyContext *Context)
     : ClangTidyCheck(Name, Context),
       IncludeStyle(IncludeSorter::parseIncludeStyle(
-          Options.get("IncludeStyle", "llvm"))) {}
+          Options.get("IncludeStyle", "llvm"))),
+      UseCERTSemantics(Context->isCheckEnabled("cert-oop11-cpp")) {}
 
 void MoveConstructorInitCheck::registerMatchers(MatchFinder *Finder) {
   // Only register the matchers for C++11; the functionality currently does not
@@ -67,21 +68,26 @@
                      hasDeclaration(cxxRecordDecl(hasMethod(cxxConstructorDecl(
                          isMoveConstructor(), unless(isDeleted()))))),
                      matchers::isExpensiveToCopy()));
-  Finder->addMatcher(
-      cxxConstructorDecl(
-          allOf(
-              unless(isMoveConstructor()),
-              hasAnyConstructorInitializer(withInitializer(cxxConstructExpr(
-                  hasDeclaration(cxxConstructorDecl(isCopyConstructor())),
-                  hasArgument(
-                      0, declRefExpr(
-                             to(parmVarDecl(
-                                    hasType(
-                                        NonConstValueMovableAndExpensiveToCopy))
-                                    .bind("movable-param")))
-                             .bind("init-arg")))))))
-          .bind("ctor-decl"),
-      this);
+
+  // This checker is also used to implement cert-oop11-cpp, but when using that
+  // form of the checker, we do not want to diagnose movable parameters.
+  if (!UseCERTSemantics)
+    Finder->addMatcher(
+        cxxConstructorDecl(
+            allOf(
+                unless(isMoveConstructor()),
+                hasAnyConstructorInitializer(withInitializer(cxxConstructExpr(
+                    hasDeclaration(cxxConstructorDecl(isCopyConstructor())),
+                    hasArgument(
+                        0,
+                        declRefExpr(
+                            to(parmVarDecl(
+                                   hasType(
+                                       NonConstValueMovableAndExpensiveToCopy))
+                                   .bind("movable-param")))
+                            .bind("init-arg")))))))
+            .bind("ctor-decl"),
+        this);
 }
 
 void MoveConstructorInitCheck::check(const MatchFinder::MatchResult &Result) {