]> granicus.if.org Git - clang/commitdiff
[Objective-C Sema] It is permissable to bridge cast to 'id'
authorFariborz Jahanian <fjahanian@apple.com>
Thu, 9 Apr 2015 23:39:53 +0000 (23:39 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Thu, 9 Apr 2015 23:39:53 +0000 (23:39 +0000)
of a CFType bridged to some unknown Objective-C type.
rdar://20113785

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234545 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExprObjC.cpp
test/SemaObjC/arc-bridged-cast.m

index 52a384f7dcc4df8abd6c297fb4dc85c758ab4781..fdd3b9866144271187b2dd37f9a65a3981015aa5 100644 (file)
@@ -3380,12 +3380,13 @@ static bool CheckObjCBridgeNSCast(Sema &S, QualType castType, Expr *castExpr,
               return false;
            }
           }
+        } else if (!castType->isObjCIdType()) {
+          S.Diag(castExpr->getLocStart(), diag::err_objc_cf_bridged_not_interface)
+            << castExpr->getType() << Parm;
+          S.Diag(TDNDecl->getLocStart(), diag::note_declared_at);
+          if (Target)
+            S.Diag(Target->getLocStart(), diag::note_declared_at);
         }
-        S.Diag(castExpr->getLocStart(), diag::err_objc_cf_bridged_not_interface)
-          << castExpr->getType() << Parm;
-        S.Diag(TDNDecl->getLocStart(), diag::note_declared_at);
-        if (Target)
-          S.Diag(Target->getLocStart(), diag::note_declared_at);
         return true;
       }
       return false;
index 9e716f9d40ce5eaf51c3b9796f9d08d0ca700e58..0ba7792146c6c919b2bc5f9003fb45520faf5f43 100644 (file)
@@ -80,3 +80,12 @@ void testObjCBridgeId() {
   ref = (__bridge_retained CFAnnotatedObjectRef) CreateSomething();
   ref = (__bridge_retained CFAnnotatedObjectRef) CreateNSString();
 }
+
+// rdar://20113785
+typedef const struct __attribute__((objc_bridge(UIFont))) __CTFont * CTFontRef;
+
+id testObjCBridgeUnknownTypeToId(CTFontRef font) {
+  id x = (__bridge id)font;
+  return x;
+}
+