Let Expr::HasSideEffects() return false for NULL, bool literals, this, and nullptr.

Fixes PR13413, -Wunused-private-field now warns on unused fields initialized to NULL.

llvm-svn: 160541
This commit is contained in:
Nico Weber 2012-07-20 03:39:05 +00:00
parent 3a8bdb5677
commit 9035951409
3 changed files with 17 additions and 1 deletions

View File

@ -2340,6 +2340,12 @@ public:
return Visit(E->getSubExpr());
}
bool VisitUnaryOperator(const UnaryOperator *E) { return Visit(E->getSubExpr()); }
bool VisitGNUNullExpr(const GNUNullExpr *E) { return false; }
bool VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *E) { return false; }
bool VisitCXXThisExpr(const CXXThisExpr *E) { return false; }
bool VisitCXXNullPtrLiteralExpr(const CXXNullPtrLiteralExpr *E) {
return false;
}
// Has side effects if any element does.
bool VisitInitListExpr(const InitListExpr *E) {

View File

@ -16,7 +16,7 @@ struct foo {
[NSString string];
}
}
~foo(){ s; }
~foo(){ }
private:
foo(foo const &);
foo &operator=(foo const &);

View File

@ -209,3 +209,13 @@ union S {
unsigned char Data[8];
};
} // namespace anonymous_structs_unions
namespace pr13413 {
class A {
A() : p_(__null), b_(false), a_(this), p2_(nullptr) {}
void* p_; // expected-warning{{private field 'p_' is not used}}
bool b_; // expected-warning{{private field 'b_' is not used}}
A* a_; // expected-warning{{private field 'a_' is not used}}
void* p2_; // expected-warning{{private field 'p2_' is not used}}
};
}