Do not emit a "missing -dealloc" warning if a class contains no ivars that are pointers.

This patch aims to address some of the concerns of PR 2517: http://llvm.org/bugs/show_bug.cgi?id=2517

llvm-svn: 53168
This commit is contained in:
Ted Kremenek 2008-07-07 06:36:08 +00:00
parent f5c547d499
commit 37a2c0d5d1
1 changed files with 19 additions and 3 deletions

View File

@ -48,11 +48,27 @@ void clang::CheckObjCDealloc(ObjCImplementationDecl* D,
ASTContext& Ctx = BR.getContext();
ObjCInterfaceDecl* ID = D->getClassInterface();
// Does the class contain any ivars that are pointers (or id<...>)?
// If not, skip the check entirely.
// NOTE: This is motivated by PR 2517:
// http://llvm.org/bugs/show_bug.cgi?id=2517
// Does the class contain any ivars? If not, skip the check entirely.
bool containsPointerIvar = false;
if (ID->ivar_empty())
return;
for (ObjCInterfaceDecl::ivar_iterator I=ID->ivar_begin(), E=ID->ivar_end();
I!=E; ++I) {
QualType T = (*I)->getType();
if (T->isPointerType() || T->isObjCQualifiedIdType()) {
containsPointerIvar = true;
break;
}
}
if (!containsPointerIvar)
return;
// Determine if the class subclasses NSObject.
IdentifierInfo* NSObjectII = &Ctx.Idents.get("NSObject");