if (!BE)
return;
- ArgEffect AE = ArgEffect(IncRef, ObjKind::ObjC);
+ QualType QT = CE->getType();
+ ObjKind K;
+ if (coreFoundation::isCFObjectRef(QT)) {
+ K = ObjKind::CF;
+ } else {
+ assert(cocoa::isCocoaObjectRef(QT));
+ K = ObjKind::ObjC;
+ }
+
+ ArgEffect AE = ArgEffect(IncRef, K);
switch (BE->getBridgeKind()) {
case OBC_Bridge:
typedef const void *CFTypeRef;
typedef const struct __CFString *CFStringRef;
-@interface NSString
+@interface NSString : NSObject
- (id) self;
@end
return result;
}
+typedef const void * CFTypeRef;
+typedef const struct __CFString * CFStringRef;
+typedef const struct __CFAllocator * CFAllocatorRef;
+extern const CFAllocatorRef kCFAllocatorDefault;
+
+extern CFTypeRef CFRetain(CFTypeRef cf);
+extern void CFRelease(CFTypeRef cf);
+
+void check_bridge_retained_cast() {
+ NSString *nsStr = [[NSString alloc] init];
+ CFStringRef cfStr = (__bridge_retained CFStringRef)nsStr;
+ CFRelease(cfStr); // no-warning
+}