forked from OSchip/llvm-project
Until we can make the dead stores checker smarter, dont' emit dead store warnings for C++ objects (whose constructors/destructors have possible side-effects).
llvm-svn: 91412
This commit is contained in:
parent
2151725325
commit
29f3808667
|
@ -186,6 +186,10 @@ public:
|
||||||
|
|
||||||
if (V->hasLocalStorage())
|
if (V->hasLocalStorage())
|
||||||
if (Expr* E = V->getInit()) {
|
if (Expr* E = V->getInit()) {
|
||||||
|
// Don't warn on C++ objects (yet) until we can show that their
|
||||||
|
// constructors/destructors don't have side effects.
|
||||||
|
if (isa<CXXConstructExpr>(E))
|
||||||
|
return;
|
||||||
// A dead initialization is a variable that is dead after it
|
// A dead initialization is a variable that is dead after it
|
||||||
// is initialized. We don't flag warnings for those variables
|
// is initialized. We don't flag warnings for those variables
|
||||||
// marked 'unused'.
|
// marked 'unused'.
|
||||||
|
|
|
@ -4,6 +4,10 @@
|
||||||
// RUN: clang -cc1 -analyze -analyzer-experimental-internal-checks -checker-cfref -analyzer-store=region -analyzer-constraints=basic -warn-dead-stores -verify %s
|
// RUN: clang -cc1 -analyze -analyzer-experimental-internal-checks -checker-cfref -analyzer-store=region -analyzer-constraints=basic -warn-dead-stores -verify %s
|
||||||
// RUN: clang -cc1 -analyze -analyzer-experimental-internal-checks -checker-cfref -analyzer-store=region -analyzer-constraints=range -warn-dead-stores -verify %s
|
// RUN: clang -cc1 -analyze -analyzer-experimental-internal-checks -checker-cfref -analyzer-store=region -analyzer-constraints=range -warn-dead-stores -verify %s
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// Basic dead store checking (but in C++ mode).
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
int j;
|
int j;
|
||||||
void f1() {
|
void f1() {
|
||||||
int x = 4;
|
int x = 4;
|
||||||
|
@ -17,3 +21,19 @@ void f1() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// Dead store checking involving constructors.
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
class Test1 {
|
||||||
|
int &x;
|
||||||
|
public:
|
||||||
|
Test1(int &y) : x(y) {}
|
||||||
|
~Test1() { ++x; }
|
||||||
|
};
|
||||||
|
|
||||||
|
int test_ctor_1(int x) {
|
||||||
|
{ Test1 a(x); } // no-warning
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue