]> granicus.if.org Git - clang/commitdiff
Fix StmtIterator bug reported in PR 3780 where a VLA within a DeclGroup would
authorTed Kremenek <kremenek@apple.com>
Wed, 11 Mar 2009 18:17:16 +0000 (18:17 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 11 Mar 2009 18:17:16 +0000 (18:17 +0000)
not be consulted for its size expression when operator* was called in the
StmtIterator (this resulted in an assertion failure).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66679 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/StmtIterator.cpp
test/Analysis/misc-ps.m

index 5e42e31b285370f4f8da3110b0d003163300e674..94829c01e310f2ab82a18b9593e6611025e46f6f 100644 (file)
@@ -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());
 
index 50dda78cdb1e5508cdd8ecef638c97dbb9e3d7db..08de2f4aac2b3d584c841eb8c7a0f9db1ebe0d1d 100644 (file)
@@ -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]; }