r231814 - Recognize objc_bridge(id) on bridged casts to CF types.
John McCall
rjmccall at apple.com
Tue Mar 10 11:41:23 PDT 2015
Author: rjmccall
Date: Tue Mar 10 13:41:23 2015
New Revision: 231814
URL: http://llvm.org/viewvc/llvm-project?rev=231814&view=rev
Log:
Recognize objc_bridge(id) on bridged casts to CF types.
Fixes <rdar://20107345>.
Modified:
cfe/trunk/lib/Sema/SemaExprObjC.cpp
cfe/trunk/test/SemaObjC/arc-bridged-cast.m
cfe/trunk/test/SemaObjCXX/arc-bridged-cast.mm
Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprObjC.cpp?rev=231814&r1=231813&r2=231814&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprObjC.cpp Tue Mar 10 13:41:23 2015
@@ -3477,6 +3477,9 @@ static bool CheckObjCBridgeCFCast(Sema &
if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {
if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {
HadTheAttribute = true;
+ if (Parm->isStr("id"))
+ return true;
+
NamedDecl *Target = nullptr;
// Check for an existing type with this name.
LookupResult R(S, DeclarationName(Parm), SourceLocation(),
Modified: cfe/trunk/test/SemaObjC/arc-bridged-cast.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/arc-bridged-cast.m?rev=231814&r1=231813&r2=231814&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/arc-bridged-cast.m (original)
+++ cfe/trunk/test/SemaObjC/arc-bridged-cast.m Tue Mar 10 13:41:23 2015
@@ -62,3 +62,21 @@ CFTypeRef fixitsWithSpace(id obj) {
// CHECK: fix-it:"{{.*}}":{59:9-59:9}:"(__bridge CFTypeRef)"
// CHECK: fix-it:"{{.*}}":{59:9-59:9}:" CFBridgingRetain"
}
+
+// rdar://problem/20107345
+typedef const struct __attribute__((objc_bridge(id))) __CFAnnotatedObject *CFAnnotatedObjectRef;
+CFAnnotatedObjectRef CFGetAnnotated();
+
+void testObjCBridgeId() {
+ id obj;
+ obj = (__bridge id)CFGetAnnotated();
+ obj = (__bridge NSString*)CFGetAnnotated();
+ obj = (__bridge_transfer id)CFGetAnnotated();
+ obj = (__bridge_transfer NSString*)CFGetAnnotated();
+
+ CFAnnotatedObjectRef ref;
+ ref = (__bridge CFAnnotatedObjectRef) CreateSomething();
+ ref = (__bridge CFAnnotatedObjectRef) CreateNSString();
+ ref = (__bridge_retained CFAnnotatedObjectRef) CreateSomething();
+ ref = (__bridge_retained CFAnnotatedObjectRef) CreateNSString();
+}
Modified: cfe/trunk/test/SemaObjCXX/arc-bridged-cast.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/arc-bridged-cast.mm?rev=231814&r1=231813&r2=231814&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjCXX/arc-bridged-cast.mm (original)
+++ cfe/trunk/test/SemaObjCXX/arc-bridged-cast.mm Tue Mar 10 13:41:23 2015
@@ -34,3 +34,21 @@ void to_cf(id obj) {
}
template void to_cf<CFTypeRef, CFStringRef>(id);
+
+// rdar://problem/20107345
+typedef const struct __attribute__((objc_bridge(id))) __CFAnnotatedObject *CFAnnotatedObjectRef;
+CFAnnotatedObjectRef CFGetAnnotated();
+
+void testObjCBridgeId() {
+ id obj;
+ obj = (__bridge id)CFGetAnnotated();
+ obj = (__bridge NSString*)CFGetAnnotated();
+ obj = (__bridge_transfer id)CFGetAnnotated();
+ obj = (__bridge_transfer NSString*)CFGetAnnotated();
+
+ CFAnnotatedObjectRef ref;
+ ref = (__bridge CFAnnotatedObjectRef) CreateSomething();
+ ref = (__bridge CFAnnotatedObjectRef) CreateNSString();
+ ref = (__bridge_retained CFAnnotatedObjectRef) CreateSomething();
+ ref = (__bridge_retained CFAnnotatedObjectRef) CreateNSString();
+}
More information about the cfe-commits
mailing list