forked from OSchip/llvm-project
Distinguish between dead stores and dead initializations.
llvm-svn: 53628
This commit is contained in:
parent
24768e3dc4
commit
81bfc074c9
|
@ -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";
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue