29 if (!EnableCFBridgeFns)
30 EnableCFBridgeFns = SemaRef.ObjC().isKnownName(
"CFBridgingRetain") &&
31 SemaRef.ObjC().isKnownName(
"CFBridgingRelease");
32 return *EnableCFBridgeFns;
40 bool AllowOnUnknownClass) {
51 AllowOnUnknownClass =
true;
57 if (!AllowOnUnknownClass && (!
Class ||
Class->getName() ==
"NSObject"))
59 if (!AllowOnUnknownClass && !
Class->hasDefinition())
69 if (
E->getOpcode() != BO_Assign)
78 if (
const FullExpr *FE = dyn_cast<FullExpr>(
E))
89 if (FD->hasAttr<CFReturnsRetainedAttr>())
93 FD->getIdentifier() &&
94 FD->getParent()->isTranslationUnit() &&
95 FD->isExternallyVisible() &&
97 FD->getIdentifier()->getName())) {
98 StringRef fname = FD->getIdentifier()->getName();
99 if (fname.ends_with(
"Retain") || fname.contains(
"Create") ||
100 fname.contains(
"Copy"))
107 while (implCE && implCE->
getCastKind() == CK_BitCast)
108 implCE = dyn_cast<ImplicitCastExpr>(implCE->
getSubExpr());
110 return implCE && implCE->
getCastKind() == CK_ARCConsumeObject;