diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/AST/StmtIterator.cpp | 14 | ||||
-rw-r--r-- | clang/test/Analysis/misc-ps.m | 6 |
2 files changed, 11 insertions, 9 deletions
diff --git a/clang/lib/AST/StmtIterator.cpp b/clang/lib/AST/StmtIterator.cpp index 5e42e31b285..94829c01e31 100644 --- a/clang/lib/AST/StmtIterator.cpp +++ b/clang/lib/AST/StmtIterator.cpp @@ -132,17 +132,17 @@ StmtIteratorBase::StmtIteratorBase(VariableArrayType* t) Stmt*& StmtIteratorBase::GetDeclExpr() const { - if (inDeclGroup()) { - VarDecl* VD = cast<VarDecl>(*DGI); - return VD->Init; - } - - assert (inDecl() || inSizeOfTypeVA()); - if (VariableArrayType* VAPtr = getVAPtr()) { assert (VAPtr->SizeExpr); return VAPtr->SizeExpr; } + + assert (inDecl() || inDeclGroup()); + + if (inDeclGroup()) { + VarDecl* VD = cast<VarDecl>(*DGI); + return VD->Init; + } assert (inDecl()); diff --git a/clang/test/Analysis/misc-ps.m b/clang/test/Analysis/misc-ps.m index 50dda78cdb1..08de2f4aac2 100644 --- a/clang/test/Analysis/misc-ps.m +++ b/clang/test/Analysis/misc-ps.m @@ -178,13 +178,13 @@ char pr3770(int x) { return 'a'; } -// PR 3780 +// PR 3772 // - We just want to test that this doesn't crash the analyzer. typedef struct st ST; struct st { char *name; }; extern ST *Cur_Pu; -void pr3780(void) +void pr3772(void) { static ST *last_Cur_Pu; if (last_Cur_Pu == Cur_Pu) { @@ -192,4 +192,6 @@ void pr3780(void) } } +// PR 3780 - This tests that StmtIterator isn't broken for VLAs in DeclGroups. +void pr3780(int sz) { typedef double MAT[sz][sz]; } |