[PATCH] D61827: [clang-tidy] modernize-loop-convert: impl const cast iter
Torbjörn Klatt via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat May 11 12:19:03 PDT 2019
torbjoernk created this revision.
torbjoernk added reviewers: dergachev.a, hintonda, alexfh.
torbjoernk added a project: clang-tools-extra.
Herald added subscribers: cfe-commits, xazax.hun.
Herald added a project: clang.
modernize-loop-convert was not detecting implicit casts to
const_iterator as convertible to range-based loops:
std::vector<int> vec{1,2,3,4}
for(std::vector<int>::const_iterator i = vec.begin();
i != vec.end();
++i) { }
Thanks to Don Hinton for advice on cfe-dev.
Also simplify AST matcher for matching iterator-based loops.
Thanks to Artem Dergachev for spotting it on cfe-dev.
Fixes PR#35082
Repository:
rCTE Clang Tools Extra
https://reviews.llvm.org/D61827
Files:
clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
clang-tools-extra/test/clang-tidy/modernize-loop-convert-basic.cpp
Index: clang-tools-extra/test/clang-tidy/modernize-loop-convert-basic.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/modernize-loop-convert-basic.cpp
+++ clang-tools-extra/test/clang-tidy/modernize-loop-convert-basic.cpp
@@ -270,6 +270,13 @@
// CHECK-FIXES: for (auto & P : *Ps)
// CHECK-FIXES-NEXT: printf("s has value %d\n", P.X);
+ for (S::const_iterator It = Ss.begin(), E = Ss.end(); It != E; ++It) {
+ printf("s has value %d\n", (*It).X);
+ }
+ // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead
+ // CHECK-FIXES: for (auto It : Ss)
+ // CHECK-FIXES-NEXT: printf("s has value %d\n", It.X);
+
for (S::const_iterator It = Ss.cbegin(), E = Ss.cend(); It != E; ++It) {
printf("s has value %d\n", (*It).X);
}
Index: clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
+++ clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
@@ -128,10 +128,7 @@
.bind(BeginCallName);
DeclarationMatcher InitDeclMatcher =
- varDecl(hasInitializer(anyOf(ignoringParenImpCasts(BeginCallMatcher),
- materializeTemporaryExpr(
- ignoringParenImpCasts(BeginCallMatcher)),
- hasDescendant(BeginCallMatcher))))
+ varDecl(hasInitializer(hasDescendant(BeginCallMatcher)))
.bind(InitVarName);
DeclarationMatcher EndDeclMatcher =
@@ -791,11 +788,6 @@
CanonicalBeginType->getPointeeType(),
CanonicalInitVarType->getPointeeType()))
return false;
- } else if (!Context->hasSameType(CanonicalInitVarType,
- CanonicalBeginType)) {
- // Check for qualified types to avoid conversions from non-const to const
- // iterator types.
- return false;
}
} else if (FixerKind == LFK_PseudoArray) {
// This call is required to obtain the container.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D61827.199153.patch
Type: text/x-patch
Size: 2123 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190511/e8b1dbfc/attachment.bin>
More information about the cfe-commits
mailing list