From: Ted Kremenek Date: Thu, 6 Sep 2007 23:25:10 +0000 (+0000) Subject: Minor bug fixes to corner cases where LiveVariables would crash on some CFGs X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e2ca142ba6cd58541e140a4193f4a272dcc3d6e1;p=clang Minor bug fixes to corner cases where LiveVariables would crash on some CFGs that contained no declarations, or when a variable is declared but never used. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41756 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Analysis/LiveVariables.cpp b/Analysis/LiveVariables.cpp index b5248fe99e..6b25f9eee6 100644 --- a/Analysis/LiveVariables.cpp +++ b/Analysis/LiveVariables.cpp @@ -40,7 +40,9 @@ public: void VisitStmt(Stmt* S); void VisitDeclRefExpr(DeclRefExpr* DR); + void VisitDeclStmt(DeclStmt* DS); void Register(Decl* D); + void RegisterDeclChain(Decl* D); void RegisterUsedDecls(); }; @@ -50,7 +52,15 @@ void RegisterDecls::VisitStmt(Stmt* S) { } void RegisterDecls::VisitDeclRefExpr(DeclRefExpr* DR) { - for (Decl* D = DR->getDecl() ; D != NULL ; D = D->getNextDeclarator()) + RegisterDeclChain(DR->getDecl()); +} + +void RegisterDecls::VisitDeclStmt(DeclStmt* DS) { + RegisterDeclChain(DS->getDecl()); +} + +void RegisterDecls::RegisterDeclChain(Decl* D) { + for (; D != NULL ; D = D->getNextDeclarator()) Register(D); } @@ -363,7 +373,6 @@ void LiveVariables::runOnCFG(const CFG& cfg, LiveVariablesAuditor* Auditor) { void LiveVariables::runOnBlock(const CFGBlock* B, LiveVariablesAuditor* Auditor) { - assert (NumDecls && "You must use runOnCFG before using runOnBlock."); LivenessTFuncs TF(*this,Auditor); TF.ProcessBlock(B); }