diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2008-05-21 05:06:46 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2008-05-21 05:06:46 +0000 |
commit | 0883bfb54195eec4f716d11ee35f3931c8665bdd (patch) | |
tree | 86b6412c3b58eccf22d02cfed5fbb5b07109cf9a /clang/lib/AST/StmtIterator.cpp | |
parent | 14b2993484921f0aba766ac70352e030cec8ee5d (diff) | |
download | bcm5719-llvm-0883bfb54195eec4f716d11ee35f3931c8665bdd.tar.gz bcm5719-llvm-0883bfb54195eec4f716d11ee35f3931c8665bdd.zip |
PR2347: Fix crash iterating over VLAs; this started triggering because
we now iterate over the whole AST when we destroy it.
llvm-svn: 51363
Diffstat (limited to 'clang/lib/AST/StmtIterator.cpp')
-rw-r--r-- | clang/lib/AST/StmtIterator.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/clang/lib/AST/StmtIterator.cpp b/clang/lib/AST/StmtIterator.cpp index 14083e30a99..61b8e0f9c52 100644 --- a/clang/lib/AST/StmtIterator.cpp +++ b/clang/lib/AST/StmtIterator.cpp @@ -36,16 +36,16 @@ void StmtIteratorBase::NextVA() { 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 @@ StmtIteratorBase::StmtIteratorBase(VariableArrayType* t) RawVAPtr |= reinterpret_cast<uintptr_t>(t); } - Stmt*& StmtIteratorBase::GetDeclExpr() const { if (VariableArrayType* VAPtr = getVAPtr()) { assert (VAPtr->SizeExpr); |