14 using namespace clang;
15 using namespace arcmt;
16 using namespace trans;
20 class GCCollectableCallsChecker :
30 NSMakeCollectableII = &Ids.
get(
"NSMakeCollectable");
31 CFMakeCollectableII = &Ids.
get(
"CFMakeCollectable");
34 bool shouldWalkTypesOfTypeLocs()
const {
return false; }
46 if (
DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {
47 if (
FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(DRE->getDecl())) {
48 if (!FD->getDeclContext()->getRedeclContext()->isFileContext())
51 if (FD->getIdentifier() == NSMakeCollectableII) {
53 TA.clearDiagnostic(diag::err_unavailable,
54 diag::err_unavailable_message,
55 diag::err_ovl_deleted_call,
56 DRE->getSourceRange());
57 TA.replace(DRE->getSourceRange(),
"CFBridgingRelease");
59 }
else if (FD->getIdentifier() == CFMakeCollectableII) {
60 TA.reportError(
"CFMakeCollectable will leak the object that it "
61 "receives in ARC", DRE->getLocation(),
62 DRE->getSourceRange());