aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AST/StmtIterator.cpp16
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;