summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2016-01-08 15:50:51 +0000
committerAaron Ballman <aaron@aaronballman.com>2016-01-08 15:50:51 +0000
commitc00ad6c5fb7740c18f324928f2add503fee752d1 (patch)
tree72529270b8a26f403c67fe2bff3c06d9e8998f7c /clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp
parentb1b2f87e37774ee61dc5c6ea3aa04a99a1adda66 (diff)
downloadbcm5719-llvm-c00ad6c5fb7740c18f324928f2add503fee752d1.tar.gz
bcm5719-llvm-c00ad6c5fb7740c18f324928f2add503fee752d1.zip
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
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp')
-rw-r--r--clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp38
1 files changed, 22 insertions, 16 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp b/clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp
index ba182f3962e..eeebcf692bc 100644
--- a/clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/MoveConstructorInitCheck.cpp
@@ -42,7 +42,8 @@ MoveConstructorInitCheck::MoveConstructorInitCheck(StringRef Name,
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 @@ void MoveConstructorInitCheck::registerMatchers(MatchFinder *Finder) {
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) {
OpenPOWER on IntegriCloud