[cfe-commits] r42438 - /cfe/trunk/include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h

Ted Kremenek kremenek at apple.com
Fri Sep 28 10:55:51 PDT 2007


Author: kremenek
Date: Fri Sep 28 12:55:50 2007
New Revision: 42438

URL: http://llvm.org/viewvc/llvm-project?rev=42438&view=rev
Log:
Fixed bug where declaration initializer expressions were not
traversed by the visitor.

Modified:
    cfe/trunk/include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h

Modified: cfe/trunk/include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h?rev=42438&r1=42437&r2=42438&view=diff

==============================================================================
--- cfe/trunk/include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h (original)
+++ cfe/trunk/include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h Fri Sep 28 12:55:50 2007
@@ -27,7 +27,7 @@
 
 #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 @@
 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)





More information about the cfe-commits mailing list