aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra
diff options
context:
space:
mode:
authorHaojian Wu <hokein@google.com>2016-02-08 15:59:42 +0000
committerHaojian Wu <hokein@google.com>2016-02-08 15:59:42 +0000
commit1e3c32b38a17920a3bc7e598b764dee4bb176b39 (patch)
treeca2b9d328ae17b71c4ae7825d8c2e55e77641e97 /clang-tools-extra
parent45bfe4cc8a07cec3c635da9355c30537f2bfde3b (diff)
downloadllvm-1e3c32b38a17920a3bc7e598b764dee4bb176b39.zip
llvm-1e3c32b38a17920a3bc7e598b764dee4bb176b39.tar.gz
llvm-1e3c32b38a17920a3bc7e598b764dee4bb176b39.tar.bz2
[clang-tidy] Fix assertion failure on `at` function in modernize-loop-convert.
Reviewers: alexfh Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D16926 llvm-svn: 260107
Diffstat (limited to 'clang-tools-extra')
-rw-r--r--clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp4
-rw-r--r--clang-tools-extra/docs/clang-tidy/checks/modernize-loop-convert.rst2
-rw-r--r--clang-tools-extra/test/clang-tidy/Inputs/modernize-loop-convert/structures.h1
-rw-r--r--clang-tools-extra/test/clang-tidy/modernize-loop-convert-extra.cpp8
4 files changed, 12 insertions, 3 deletions
diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp
index c50e923..b3dfa93 100644
--- a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp
@@ -391,8 +391,8 @@ static bool isAliasDecl(ASTContext *Context, const Decl *TheDecl,
// This check is needed because getMethodDecl can return nullptr if the
// callee is a member function pointer.
const auto *MDecl = MemCall->getMethodDecl();
- if (MDecl && !isa<CXXConversionDecl>(MDecl) && MDecl->getName() == "at") {
- assert(MemCall->getNumArgs() == 1);
+ if (MDecl && !isa<CXXConversionDecl>(MDecl) && MDecl->getName() == "at" &&
+ MemCall->getNumArgs() == 1) {
return isIndexInSubscriptExpr(MemCall->getArg(0), IndexVar);
}
return false;
diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize-loop-convert.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize-loop-convert.rst
index e65c9e5..9ef9772 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/modernize-loop-convert.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/modernize-loop-convert.rst
@@ -89,7 +89,7 @@ Original:
// reasonable conversion
for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
- cout << *it;*
+ cout << *it;
// reasonable conversion
for (int i = 0; i < v.size(); ++i)
diff --git a/clang-tools-extra/test/clang-tidy/Inputs/modernize-loop-convert/structures.h b/clang-tools-extra/test/clang-tidy/Inputs/modernize-loop-convert/structures.h
index 6eecae9..02d440c 100644
--- a/clang-tools-extra/test/clang-tidy/Inputs/modernize-loop-convert/structures.h
+++ b/clang-tools-extra/test/clang-tidy/Inputs/modernize-loop-convert/structures.h
@@ -98,6 +98,7 @@ class dependent {
ElemType & operator[](unsigned);
const ElemType & operator[](unsigned) const;
ElemType & at(unsigned);
+ ElemType & at(unsigned, unsigned);
const ElemType & at(unsigned) const;
// Intentionally evil.
diff --git a/clang-tools-extra/test/clang-tidy/modernize-loop-convert-extra.cpp b/clang-tools-extra/test/clang-tidy/modernize-loop-convert-extra.cpp
index 42796f2..7312b48 100644
--- a/clang-tools-extra/test/clang-tidy/modernize-loop-convert-extra.cpp
+++ b/clang-tools-extra/test/clang-tidy/modernize-loop-convert-extra.cpp
@@ -251,8 +251,16 @@ void refs_and_vals() {
// CHECK-FIXES-NEXT: const int& Idx = Other[0];
// CHECK-FIXES-NEXT: unsigned Othersize = Other.size();
+ for (int i = 0; i < Other.size(); ++i) {
+ Other.at(i);
+ }
+ // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead
+ // CHECK-FIXES: for (int & i : Other)
+ // CHECK-FIXES: i;
+
for (int I = 0, E = Dep.size(); I != E; ++I) {
int Idx = Other.at(I);
+ Other.at(I, I); // Should not trigger assert failure.
}
}