diff options
Diffstat (limited to 'clang/AST/StmtIterator.cpp')
-rw-r--r-- | clang/AST/StmtIterator.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/AST/StmtIterator.cpp b/clang/AST/StmtIterator.cpp index ae6de11e11f..94a539770f3 100644 --- a/clang/AST/StmtIterator.cpp +++ b/clang/AST/StmtIterator.cpp @@ -31,19 +31,21 @@ static inline VariableArrayType* FindVA(Type* t) { void StmtIteratorBase::NextVA() { assert (getVAPtr()); - assert (decl); VariableArrayType* p = getVAPtr(); p = FindVA(p->getElementType().getTypePtr()); setVAPtr(p); - if (!p) { + if (!p && decl) { if (VarDecl* VD = dyn_cast<VarDecl>(decl)) if (VD->Init) return; NextDecl(); } + else { + RawVAPtr = 0; + } } void StmtIteratorBase::NextDecl(bool ImmediateAdvance) { @@ -94,6 +96,12 @@ StmtIteratorBase::StmtIteratorBase(ScopedDecl* d) NextDecl(false); } +StmtIteratorBase::StmtIteratorBase(VariableArrayType* t) +: decl(NULL), RawVAPtr(VASizeMode) { + RawVAPtr |= reinterpret_cast<uintptr_t>(t); +} + + Stmt*& StmtIteratorBase::GetDeclExpr() const { if (VariableArrayType* VAPtr = getVAPtr()) { assert (VAPtr->SizeExpr); |