diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2011-12-06 23:25:15 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2011-12-06 23:25:15 +0000 |
commit | 0e35b4ecee380c2b4c33d75da6bc2fb6f6bc7df3 (patch) | |
tree | dbadb1c79b050cb2e31e6b8d5e9e55b5f25c05b9 | |
parent | a91efb14cbf6af999dee02d9b611a57c7b52e209 (diff) |
DeadStoresChecker: when whitelisting dead initializations with constants, look
for a foldable constant rather than an IR-level constant. This is still far too
liberal, but is a step in the right direction.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145990 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/AST/Expr.h | 5 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp | 2 |
2 files changed, 4 insertions, 3 deletions
diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index ac4ffe0b43..5162941f9b 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -421,8 +421,9 @@ public: llvm::APSInt X; return isIntegerConstantExpr(X, Ctx, Loc); } - /// isConstantInitializer - Returns true if this expression is a constant - /// initializer, which can be emitted at compile-time. + + /// isConstantInitializer - Returns true if this expression can be emitted to + /// IR as a constant, and thus can be used as a constant initializer in C. bool isConstantInitializer(ASTContext &Ctx, bool ForRef) const; /// EvalStatus is a struct with detailed info about an evaluation in progress. diff --git a/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp b/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp index 79c889d78a..448c750039 100644 --- a/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp @@ -274,7 +274,7 @@ public: // If x is EVER assigned a new value later, don't issue // a warning. This is because such initialization can be // due to defensive programming. - if (E->isConstantInitializer(Ctx, false)) + if (E->isEvaluatable(Ctx)) return; if (DeclRefExpr *DRE=dyn_cast<DeclRefExpr>(E->IgnoreParenCasts())) |