From 0e35b4ecee380c2b4c33d75da6bc2fb6f6bc7df3 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 6 Dec 2011 23:25:15 +0000 Subject: [PATCH] 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 --- include/clang/AST/Expr.h | 5 +++-- 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(E->IgnoreParenCasts())) -- 2.50.1