forked from OSchip/llvm-project
[clang-tidy] Fix an assert failure in `modernize-loop-convert`.
Summary: The test code will trigger following an assert failure: assert.h assertion failed at LoopConvertUtils.cpp:560 in bool clang::tidy::modernize::ForLoopIndexUseVisitor::TraverseMemberExpr(clang::MemberExpr*): ExprType->isPointerType() && "Operator-> returned non-pointer type" Reviewers: alexfh Differential Revision: http://reviews.llvm.org/D17287 llvm-svn: 260953
This commit is contained in:
parent
67f880641c
commit
6b4c0b5b66
|
@ -557,7 +557,9 @@ bool ForLoopIndexUseVisitor::TraverseMemberExpr(MemberExpr *Member) {
|
|||
if (ExprType.isNull())
|
||||
ExprType = Obj->getType();
|
||||
|
||||
assert(ExprType->isPointerType() && "Operator-> returned non-pointer type");
|
||||
if (!ExprType->isPointerType())
|
||||
return false;
|
||||
|
||||
// FIXME: This works around not having the location of the arrow operator.
|
||||
// Consider adding OperatorLoc to MemberExpr?
|
||||
SourceLocation ArrowLoc = Lexer::getLocForEndOfToken(
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// RUN: clang-tidy %s -checks=-*,modernize-loop-convert --
|
||||
|
||||
// Note: this test expects no assert failure happened in clang-tidy.
|
||||
|
||||
class LinguisticItem {
|
||||
LinguisticItem *x0;
|
||||
class x1 {
|
||||
bool operator!= ( const x1 &;
|
||||
operator* ( ;
|
||||
LinguisticItem * &operator-> ( ;
|
||||
operator++ (
|
||||
} begin() const;
|
||||
x1 end() const {
|
||||
LinguisticStream x2;
|
||||
for (x1 x3 = x2.begin x3 != x2.end; ++x3)
|
||||
x3->x0
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue