This revision was automatically updated to reflect the committed changes.
Closed by commit rC339201: [analyzer] Avoid querying this-pointers for
static-methods. (authored by mattd, committed by ).
Repository:
rC Clang
https://reviews.llvm.org/D50408
Files:
lib/StaticAnalyzer/Core/LoopWidening.cpp
test/Analysis/loop-widening-ignore-static-methods.cpp
Index: test/Analysis/loop-widening-ignore-static-methods.cpp
===================================================================
--- test/Analysis/loop-widening-ignore-static-methods.cpp
+++ test/Analysis/loop-widening-ignore-static-methods.cpp
@@ -0,0 +1,12 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=core -analyzer-config
widen-loops=true -analyzer-max-loop 2 %s
+// REQUIRES: asserts
+// expected-no-diagnostics
+//
+// This test checks that the loop-widening code ignores static methods. If
that is not the
+// case, then an assertion will trigger.
+
+class Test {
+ static void foo() {
+ for (;;) {}
+ }
+};
Index: lib/StaticAnalyzer/Core/LoopWidening.cpp
===================================================================
--- lib/StaticAnalyzer/Core/LoopWidening.cpp
+++ lib/StaticAnalyzer/Core/LoopWidening.cpp
@@ -81,8 +81,10 @@
// 'this' pointer is not an lvalue, we should not invalidate it. If the loop
// is located in a method, constructor or destructor, the value of 'this'
- // pointer shoule remain unchanged.
- if (const CXXMethodDecl *CXXMD = dyn_cast<CXXMethodDecl>(STC->getDecl())) {
+ // pointer should remain unchanged. Ignore static methods, since they do not
+ // have 'this' pointers.
+ const CXXMethodDecl *CXXMD = dyn_cast<CXXMethodDecl>(STC->getDecl());
+ if (CXXMD && !CXXMD->isStatic()) {
const CXXThisRegion *ThisR = MRMgr.getCXXThisRegion(
CXXMD->getThisType(STC->getAnalysisDeclContext()->getASTContext()),
STC);
Index: test/Analysis/loop-widening-ignore-static-methods.cpp
===================================================================
--- test/Analysis/loop-widening-ignore-static-methods.cpp
+++ test/Analysis/loop-widening-ignore-static-methods.cpp
@@ -0,0 +1,12 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=core -analyzer-config widen-loops=true -analyzer-max-loop 2 %s
+// REQUIRES: asserts
+// expected-no-diagnostics
+//
+// This test checks that the loop-widening code ignores static methods. If that is not the
+// case, then an assertion will trigger.
+
+class Test {
+ static void foo() {
+ for (;;) {}
+ }
+};
Index: lib/StaticAnalyzer/Core/LoopWidening.cpp
===================================================================
--- lib/StaticAnalyzer/Core/LoopWidening.cpp
+++ lib/StaticAnalyzer/Core/LoopWidening.cpp
@@ -81,8 +81,10 @@
// 'this' pointer is not an lvalue, we should not invalidate it. If the loop
// is located in a method, constructor or destructor, the value of 'this'
- // pointer shoule remain unchanged.
- if (const CXXMethodDecl *CXXMD = dyn_cast<CXXMethodDecl>(STC->getDecl())) {
+ // pointer should remain unchanged. Ignore static methods, since they do not
+ // have 'this' pointers.
+ const CXXMethodDecl *CXXMD = dyn_cast<CXXMethodDecl>(STC->getDecl());
+ if (CXXMD && !CXXMD->isStatic()) {
const CXXThisRegion *ThisR = MRMgr.getCXXThisRegion(
CXXMD->getThisType(STC->getAnalysisDeclContext()->getASTContext()),
STC);
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits