From: Ted Kremenek Date: Tue, 15 Jul 2008 18:06:32 +0000 (+0000) Subject: Distinguish between dead stores and dead initializations. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f9c2a5d1b49b60962b613a1dfffa23831ca298a2;p=clang Distinguish between dead stores and dead initializations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53628 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/DeadStores.cpp b/lib/Analysis/DeadStores.cpp index 0bbd878609..b9d9382f6c 100644 --- a/lib/Analysis/DeadStores.cpp +++ b/lib/Analysis/DeadStores.cpp @@ -37,16 +37,26 @@ public: virtual ~DeadStoreObs() {} - void Report(VarDecl* V, bool inEnclosing, SourceLocation L, SourceRange R) { + void Report(VarDecl* V, bool inEnclosing, SourceLocation L, SourceRange R, + bool isInitialization = false) { - std::string name(V->getName()); - std::string msg = inEnclosing - ? "Although the value stored to '" + name + - "' is used in the enclosing expression, the value is never actually" - " read from '" + name + "'" - : "Value stored to '" + name + "' is never read"; + std::string name(V->getName()); - BR.EmitBasicReport("dead store", msg.c_str(), L, R); + if (isInitialization) { + std::string msg = "Value stored to '" + name + + "' during its initialization is never read"; + + BR.EmitBasicReport("dead initialization", msg.c_str(), L, R); + } + else { + std::string msg = inEnclosing + ? "Although the value stored to '" + name + + "' is used in the enclosing expression, the value is never actually" + " read from '" + name + "'" + : "Value stored to '" + name + "' is never read"; + + BR.EmitBasicReport("dead store", msg.c_str(), L, R); + } } void CheckVarDecl(VarDecl* VD, Expr* Ex, Expr* Val, @@ -124,7 +134,7 @@ public: // a warning. This is because such initialization can be // due to defensive programming. if (!E->isConstantExpr(Ctx,NULL)) - Report(V, false, V->getLocation(), E->getSourceRange()); + Report(V, false, V->getLocation(), E->getSourceRange(), true); } } } diff --git a/test/Analysis/conditional-op-missing-lhs.c b/test/Analysis/conditional-op-missing-lhs.c index 6296291cdf..9fbb9f1987 100644 --- a/test/Analysis/conditional-op-missing-lhs.c +++ b/test/Analysis/conditional-op-missing-lhs.c @@ -4,7 +4,7 @@ void f1() { int i; - int j = i ? : 1; // expected-warning{{use of uninitialized variable}} //expected-warning{{Value stored to 'j' is never read}} + int j = i ? : 1; // expected-warning{{use of uninitialized variable}} //expected-warning{{Value stored to 'j' during its initialization is never read}} } void *f2(int *i)