diff options
author | Manuel Klimek <klimek@google.com> | 2015-09-23 18:40:47 +0000 |
---|---|---|
committer | Manuel Klimek <klimek@google.com> | 2015-09-23 18:40:47 +0000 |
commit | 143b6442381dc7a667fc17c75dfc1d8c6c52fdfe (patch) | |
tree | 2bc2b406b8d307f2954fd3beab6b311bb28e3d8a /clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp | |
parent | e1440256520aba388015a15f5c273afa799271d5 (diff) | |
download | bcm5719-llvm-143b6442381dc7a667fc17c75dfc1d8c6c52fdfe.tar.gz bcm5719-llvm-143b6442381dc7a667fc17c75dfc1d8c6c52fdfe.zip |
Fix loop-convert for const references to containers.
Previously we would use a non-const loop variable in the range-based
loop for:
void f(const std::vector<int> &v) {
for (size_t i = 0; i < v.size(); ++i) {
Now we use const auto&.
Note that we'll also want to use a copy at least for simple types.
llvm-svn: 248418
Diffstat (limited to 'clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp')
-rw-r--r-- | clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp index 2c623727119..054e5ce94d9 100644 --- a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp @@ -391,6 +391,12 @@ static bool containerIsConst(const Expr *ContainerExpr, bool Dereference) { return false; CType = CType->getPointeeType(); } + // If VDec is a reference to a container, Dereference is false, + // but we still need to check the const-ness of the underlying container + // type. + if (const auto &RT = CType->getAs<ReferenceType>()) { + CType = RT->getPointeeType(); + } return CType.isConstQualified(); } return false; |