diff options
-rw-r--r-- | AST/StmtIterator.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/AST/StmtIterator.cpp b/AST/StmtIterator.cpp index 89d17bd340..ae6de11e11 100644 --- a/AST/StmtIterator.cpp +++ b/AST/StmtIterator.cpp @@ -38,10 +38,11 @@ void StmtIteratorBase::NextVA() { setVAPtr(p); if (!p) { - VarDecl* VD = cast<VarDecl>(decl); - - if (!VD->Init) - NextDecl(); + if (VarDecl* VD = dyn_cast<VarDecl>(decl)) + if (VD->Init) + return; + + NextDecl(); } } @@ -69,6 +70,13 @@ void StmtIteratorBase::NextDecl(bool ImmediateAdvance) { if (VD->getInit()) return; } + else if (TypedefDecl* TD = dyn_cast<TypedefDecl>(decl)) { + if (VariableArrayType* VAPtr = + FindVA(TD->getUnderlyingType().getTypePtr())) { + setVAPtr(VAPtr); + return; + } + } else if (EnumConstantDecl* ECD = dyn_cast<EnumConstantDecl>(decl)) if (ECD->getInitExpr()) return; |