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 (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
|
||||
// is initialized. We don't flag warnings for those variables
|
||||
// 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=range -warn-dead-stores -verify %s
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Basic dead store checking (but in C++ mode).
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
int j;
|
||||
void f1() {
|
||||
int x = 4;
|
||||
|
@ -17,3 +21,19 @@ void f1() {
|
|||
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