summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2016-06-24 16:26:43 +0000
committerStephan Bergmann <sbergman@redhat.com>2016-06-24 16:26:43 +0000
commitbf95fff9bdfb2b78bba083246b42784f11230eb0 (patch)
treec4b6f753c73bc8f2880bb8c4e1b5b8d854353507
parent9f7f3e1e64067c6802882e691a7a3c8a5926a737 (diff)
downloadbcm5719-llvm-bf95fff9bdfb2b78bba083246b42784f11230eb0.tar.gz
bcm5719-llvm-bf95fff9bdfb2b78bba083246b42784f11230eb0.zip
DeadStoresChecker: Don't warn about dead stores into volatile variables
llvm-svn: 273689
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp2
-rw-r--r--clang/test/Analysis/dead-stores.c4
2 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp
index f2a269a3335..8ca2a24cffe 100644
--- a/clang/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp
@@ -278,6 +278,8 @@ public:
RHS = RHS->IgnoreParenCasts();
QualType T = VD->getType();
+ if (T.isVolatileQualified())
+ return;
if (T->isPointerType() || T->isObjCObjectPointerType()) {
if (RHS->isNullPointerConstant(Ctx, Expr::NPC_ValueDependentIsNull))
return;
diff --git a/clang/test/Analysis/dead-stores.c b/clang/test/Analysis/dead-stores.c
index da8e8bdb703..cddb6c666ad 100644
--- a/clang/test/Analysis/dead-stores.c
+++ b/clang/test/Analysis/dead-stores.c
@@ -569,3 +569,7 @@ void testBOComma() {
}
+void testVolatile() {
+ volatile int v;
+ v = 0; // no warning
+}
OpenPOWER on IntegriCloud