[analyzer] Remove check covered by -Wobjc-missing-super-calls.
The ObjCDealloc checker is currently disabled because it was too aggressive, but this is a good first step in getting it back to a useful state. Patch by David Kilzer! llvm-svn: 216272
This commit is contained in:
parent
78e9debf68
commit
19ecd635fe
|
@ -28,27 +28,6 @@
|
|||
using namespace clang;
|
||||
using namespace ento;
|
||||
|
||||
static bool scan_dealloc(Stmt *S, Selector Dealloc) {
|
||||
|
||||
if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(S))
|
||||
if (ME->getSelector() == Dealloc) {
|
||||
switch (ME->getReceiverKind()) {
|
||||
case ObjCMessageExpr::Instance: return false;
|
||||
case ObjCMessageExpr::SuperInstance: return true;
|
||||
case ObjCMessageExpr::Class: break;
|
||||
case ObjCMessageExpr::SuperClass: break;
|
||||
}
|
||||
}
|
||||
|
||||
// Recurse to children.
|
||||
|
||||
for (Stmt::child_iterator I = S->child_begin(), E= S->child_end(); I!=E; ++I)
|
||||
if (*I && scan_dealloc(*I, Dealloc))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool scan_ivar_release(Stmt *S, ObjCIvarDecl *ID,
|
||||
const ObjCPropertyDecl *PD,
|
||||
Selector Release,
|
||||
|
@ -181,24 +160,6 @@ static void checkObjCDealloc(const CheckerBase *Checker,
|
|||
return;
|
||||
}
|
||||
|
||||
// dealloc found. Scan for missing [super dealloc].
|
||||
if (MD->getBody() && !scan_dealloc(MD->getBody(), S)) {
|
||||
|
||||
const char* name = LOpts.getGC() == LangOptions::NonGC
|
||||
? "missing [super dealloc]"
|
||||
: "missing [super dealloc] (Hybrid MM, non-GC)";
|
||||
|
||||
std::string buf;
|
||||
llvm::raw_string_ostream os(buf);
|
||||
os << "The 'dealloc' instance method in Objective-C class '" << *D
|
||||
<< "' does not send a 'dealloc' message to its super class"
|
||||
" (missing [super dealloc])";
|
||||
|
||||
BR.EmitBasicReport(MD, Checker, name, categories::CoreFoundationObjectiveC,
|
||||
os.str(), DLoc);
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the "release" selector.
|
||||
IdentifierInfo* RII = &Ctx.Idents.get("release");
|
||||
Selector RS = Ctx.Selectors.getSelector(0, &RII);
|
||||
|
|
Loading…
Reference in New Issue