From: Ted Kremenek Date: Thu, 6 Sep 2007 23:39:53 +0000 (+0000) Subject: Added more checking in "dead stores" for values that are initialized X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=83522a31ae5d53d55ddc1f439df57b196cfc642d;p=clang Added more checking in "dead stores" for values that are initialized but never used. Fix a bug in LiveVariables where uses on the LHS of self-assign operators (e.g +=, *=, etc) would not be properly recorded in the liveness state of the variable. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41757 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Analysis/DeadStores.cpp b/Analysis/DeadStores.cpp index e7077ecae3..f79aa6ae04 100644 --- a/Analysis/DeadStores.cpp +++ b/Analysis/DeadStores.cpp @@ -47,6 +47,19 @@ public: } } } + else if(DeclStmt* DS = dyn_cast(S)) { + // Iterate through the decls. Warn if any of them (which have + // initializers) are not live. + for (Decl* D = DS->getDecl() ; D != NULL ; D = D->getNextDeclarator()) + if (VarDecl* V = dyn_cast(D)) + if (Expr* E = V->getInit()) + if (!L.isLive(Live,D)) { + SourceRange R = E->getSourceRange(); + PP.getDiagnostics().Report(D->getLocation(), + diag::warn_dead_store, 0, 0, + &R,1); + } + } } }; diff --git a/Analysis/LiveVariables.cpp b/Analysis/LiveVariables.cpp index 6b25f9eee6..bf4437470e 100644 --- a/Analysis/LiveVariables.cpp +++ b/Analysis/LiveVariables.cpp @@ -252,7 +252,10 @@ void LivenessTFuncs::VisitAssign(BinaryOperator* B) { // We only need to register kills once, so we check if this block // has been previously processed. if (!blockPreviouslyProcessed) - V.AddKill(CurrentStmt,DR); + V.AddKill(CurrentStmt,DR); + + if (B->getOpcode() != BinaryOperator::Assign) + Visit(LHS); } else Visit(LHS);