summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Sema/SemaStmt.cpp5
-rw-r--r--clang/test/SemaCXX/warn-loop-analysis.cpp8
2 files changed, 11 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index 66ddbaabf1c..2d03ab99efc 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -1214,11 +1214,12 @@ public:
// No decls found.
if (Decls.size() == 0) return;
- // Don't warn on volatile decls.
+ // Don't warn on volatile, static, or global variables.
for (llvm::SmallPtrSet<VarDecl*, 8>::iterator I = Decls.begin(),
E = Decls.end();
I != E; ++I)
- if ((*I)->getType().isVolatileQualified()) return;
+ if ((*I)->getType().isVolatileQualified() ||
+ (*I)->hasGlobalStorage()) return;
if (DeclMatcher(S, Decls, Second).FoundDeclInUse() ||
DeclMatcher(S, Decls, Third).FoundDeclInUse() ||
diff --git a/clang/test/SemaCXX/warn-loop-analysis.cpp b/clang/test/SemaCXX/warn-loop-analysis.cpp
index a55ca6c6eac..627bc51d1b0 100644
--- a/clang/test/SemaCXX/warn-loop-analysis.cpp
+++ b/clang/test/SemaCXX/warn-loop-analysis.cpp
@@ -144,3 +144,11 @@ void test5() {
for (int a; a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a;);//\
// expected-warning {{variable 'a' used in loop condition not modified in loop body}}
}
+
+// Ignore global variables and static variables.
+int x6;
+void test6() {
+ static int y;
+ for (;x6;);
+ for (;y;);
+}
OpenPOWER on IntegriCloud