diff options
author | Angel Garcia Gomez <angelgarcia@google.com> | 2015-11-03 16:38:31 +0000 |
---|---|---|
committer | Angel Garcia Gomez <angelgarcia@google.com> | 2015-11-03 16:38:31 +0000 |
commit | 432ff5e205f28f5e8a05ca5a043e05f4a9f20d2c (patch) | |
tree | 27657bd6f016f2a10cef12672fc4e8506c10ff0d /clang-tools-extra/test/clang-tidy/modernize-loop-convert-basic.cpp | |
parent | bc78a65adcf6c21443ebd646abb058c545adefb8 (diff) | |
download | bcm5719-llvm-432ff5e205f28f5e8a05ca5a043e05f4a9f20d2c.tar.gz bcm5719-llvm-432ff5e205f28f5e8a05ca5a043e05f4a9f20d2c.zip |
Handle correctly containers that are data members in modernize-loop-convert.
Summary:
I recently found that the variable naming wasn't working as expected with containers that are data members. The new index always received the name "Elem" (or equivalent) regardless of the container's name.
The check was assuming that the container's declaration was a VarDecl, which cannot be converted to a FieldDecl (a data member), and then it could never retrieve its name.
This also fixes some cases where the check failed to find the container at all (so it didn't do any fix) because of the same reason.
Reviewers: klimek
Subscribers: cfe-commits, alexfh
Differential Revision: http://reviews.llvm.org/D14289
llvm-svn: 251943
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/modernize-loop-convert-basic.cpp')
-rw-r--r-- | clang-tools-extra/test/clang-tidy/modernize-loop-convert-basic.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/modernize-loop-convert-basic.cpp b/clang-tools-extra/test/clang-tidy/modernize-loop-convert-basic.cpp index ae5308ee963..dc95434c8e2 100644 --- a/clang-tools-extra/test/clang-tidy/modernize-loop-convert-basic.cpp +++ b/clang-tools-extra/test/clang-tidy/modernize-loop-convert-basic.cpp @@ -168,6 +168,41 @@ struct HasArr { } }; +struct HasIndirectArr { + HasArr HA; + void implicitThis() { + for (int I = 0; I < N; ++I) { + printf("%d", HA.Arr[I]); + } + // CHECK-MESSAGES: :[[@LINE-3]]:5: warning: use range-based for loop instead + // CHECK-FIXES: for (int Elem : HA.Arr) + // CHECK-FIXES-NEXT: printf("%d", Elem); + + for (int I = 0; I < N; ++I) { + printf("%d", HA.ValArr[I].X); + } + // CHECK-MESSAGES: :[[@LINE-3]]:5: warning: use range-based for loop instead + // CHECK-FIXES: for (auto & Elem : HA.ValArr) + // CHECK-FIXES-NEXT: printf("%d", Elem.X); + } + + void explicitThis() { + for (int I = 0; I < N; ++I) { + printf("%d", this->HA.Arr[I]); + } + // CHECK-MESSAGES: :[[@LINE-3]]:5: warning: use range-based for loop instead + // CHECK-FIXES: for (int Elem : this->HA.Arr) + // CHECK-FIXES-NEXT: printf("%d", Elem); + + for (int I = 0; I < N; ++I) { + printf("%d", this->HA.ValArr[I].X); + } + // CHECK-MESSAGES: :[[@LINE-3]]:5: warning: use range-based for loop instead + // CHECK-FIXES: for (auto & Elem : this->HA.ValArr) + // CHECK-FIXES-NEXT: printf("%d", Elem.X); + } +}; + // Loops whose bounds are value-dependent should not be converted. template <int N> void dependentExprBound() { |