Index: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp =================================================================== --- clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp +++ clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp @@ -185,7 +185,16 @@ 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: Index: clang/test/Analysis/objc-arc.m =================================================================== --- clang/test/Analysis/objc-arc.m +++ clang/test/Analysis/objc-arc.m @@ -123,7 +123,7 @@ typedef const void *CFTypeRef; typedef const struct __CFString *CFStringRef; -@interface NSString +@interface NSString : NSObject - (id) self; @end