PR2347: Fix crash iterating over VLAs; this started triggering because
we now iterate over the whole AST when we destroy it.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51363 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/StmtIterator.cpp b/lib/AST/StmtIterator.cpp
index 14083e3..61b8e0f 100644
--- a/lib/AST/StmtIterator.cpp
+++ b/lib/AST/StmtIterator.cpp
@@ -36,16 +36,16 @@
p = FindVA(p->getElementType().getTypePtr());
setVAPtr(p);
- if (!p && decl) {
+ if (!p && inDecl()) {
if (VarDecl* VD = dyn_cast<VarDecl>(decl))
if (VD->Init)
return;
NextDecl();
- }
- else {
+ } else if (inSizeOfTypeVA()) {
+ assert(!decl);
RawVAPtr = 0;
- }
+ }
}
void StmtIteratorBase::NextDecl(bool ImmediateAdvance) {
@@ -101,7 +101,6 @@
RawVAPtr |= reinterpret_cast<uintptr_t>(t);
}
-
Stmt*& StmtIteratorBase::GetDeclExpr() const {
if (VariableArrayType* VAPtr = getVAPtr()) {
assert (VAPtr->SizeExpr);