Add support for 'cbegin()' and 'cend()' on modernize-loop-convert.
Summary:
This fixes https://llvm.org/bugs/show_bug.cgi?id=22196 .
Also add a non-trivially copyable type to fix some tests that were meant to be about using const-refs, but were changed in r248438.
Reviewers: klimek
Subscribers: alexfh, cfe-commits
Differential Revision: http://reviews.llvm.org/D13292
llvm-svn: 248994
diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
index b233196..ebe124f 100644
--- a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
@@ -112,8 +112,9 @@
/// - If the end iterator variable 'g' is defined, it is the same as 'f'.
StatementMatcher makeIteratorLoopMatcher() {
StatementMatcher BeginCallMatcher =
- cxxMemberCallExpr(argumentCountIs(0),
- callee(cxxMethodDecl(hasName("begin"))))
+ cxxMemberCallExpr(
+ argumentCountIs(0),
+ callee(cxxMethodDecl(anyOf(hasName("begin"), hasName("cbegin")))))
.bind(BeginCallName);
DeclarationMatcher InitDeclMatcher =
@@ -127,7 +128,8 @@
varDecl(hasInitializer(anything())).bind(EndVarName);
StatementMatcher EndCallMatcher = cxxMemberCallExpr(
- argumentCountIs(0), callee(cxxMethodDecl(hasName("end"))));
+ argumentCountIs(0),
+ callee(cxxMethodDecl(anyOf(hasName("end"), hasName("cend")))));
StatementMatcher IteratorBoundMatcher =
expr(anyOf(ignoringParenImpCasts(
@@ -296,7 +298,8 @@
return nullptr;
StringRef Name = Member->getMemberDecl()->getName();
StringRef TargetName = IsBegin ? "begin" : "end";
- if (Name != TargetName)
+ StringRef ConstTargetName = IsBegin ? "cbegin" : "cend";
+ if (Name != TargetName && Name != ConstTargetName)
return nullptr;
const Expr *SourceExpr = Member->getBase();
@@ -423,7 +426,7 @@
Options.store(Opts, "MinConfidence", Confs[static_cast<int>(MinConfidence)]);
SmallVector<std::string, 4> Styles{"camelBack", "CamelCase", "lower_case",
- "UPPER_CASE"};
+ "UPPER_CASE"};
Options.store(Opts, "NamingStyle", Styles[static_cast<int>(NamingStyle)]);
}