]> granicus.if.org Git - clang/commitdiff
Fixed bug where declaration initializer expressions were not
authorTed Kremenek <kremenek@apple.com>
Fri, 28 Sep 2007 17:55:50 +0000 (17:55 +0000)
committerTed Kremenek <kremenek@apple.com>
Fri, 28 Sep 2007 17:55:50 +0000 (17:55 +0000)
traversed by the visitor.

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

include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h

index e46ee11ff4259dec6822254a356fb7c4ffba34fc..e8f74c0a7b270c6fbaea31a429f120f5720d6de1 100644 (file)
@@ -27,7 +27,7 @@ break;
 
 #define DEFAULT_DISPATCH(CLASS) void Visit##CLASS(CLASS* D) {}
 #define DEFAULT_DISPATCH_VARDECL(CLASS) void Visit##CLASS(CLASS* D)\
-  { static_cast<ImplClass*>(this)->Visit##VarDecl(D); }
+  { static_cast<ImplClass*>(this)->VisitVarDecl(D); }
 
   
 namespace clang {
@@ -36,18 +36,20 @@ class CFGRecStmtDeclVisitor : public CFGRecStmtVisitor<ImplClass> {
 public:  
 
   void VisitDeclRefExpr(DeclRefExpr* DR) {
-    static_cast<ImplClass*>(this)->VisitDeclChain(DR->getDecl());
+    for (ScopedDecl* D = DR->getDecl(); D != NULL; D = D->getNextDeclarator())
+      static_cast<ImplClass*>(this)->VisitScopedDecl(D); 
   }
   
-  void VisitDeclStmt(DeclStmt* DS) { 
-    static_cast<ImplClass*>(this)->VisitDeclChain(DS->getDecl()); 
-  }
-  
-  void VisitDeclChain(ScopedDecl* D) {
-    for (; D != NULL; D = D->getNextDeclarator())
-      static_cast<ImplClass*>(this)->VisitScopedDecl(D);
+  void VisitDeclStmt(DeclStmt* DS) {
+    for (ScopedDecl* D = DS->getDecl(); D != NULL; D = D->getNextDeclarator()) {
+      static_cast<ImplClass*>(this)->VisitScopedDecl(D); 
+      // Visit the initializer.
+      if (VarDecl* VD = dyn_cast<VarDecl>(D))
+        if (Expr* I = VD->getInit())
+          static_cast<ImplClass*>(this)->Visit(I);
+    }
   }
-  
+    
   void VisitScopedDecl(ScopedDecl* D) {
     switch (D->getKind()) {
         DISPATCH_CASE(Function,FunctionDecl)