summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2015-04-09 23:39:53 +0000
committerFariborz Jahanian <fjahanian@apple.com>2015-04-09 23:39:53 +0000
commit696c88753fe7db17f98b4fd6495bd71702675648 (patch)
treec7edc83fb9e3f0957df60c16dde4ddb0c65c7d60
parent85be49d26d56a3d2c4da0ceeefdb3f4f9a4fa158 (diff)
downloadbcm5719-llvm-696c88753fe7db17f98b4fd6495bd71702675648.tar.gz
bcm5719-llvm-696c88753fe7db17f98b4fd6495bd71702675648.zip
[Objective-C Sema] It is permissable to bridge cast to 'id'
of a CFType bridged to some unknown Objective-C type. rdar://20113785 llvm-svn: 234545
-rw-r--r--clang/lib/Sema/SemaExprObjC.cpp11
-rw-r--r--clang/test/SemaObjC/arc-bridged-cast.m9
2 files changed, 15 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index 52a384f7dcc..fdd3b986614 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/lib/Sema/SemaExprObjC.cpp
@@ -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;
diff --git a/clang/test/SemaObjC/arc-bridged-cast.m b/clang/test/SemaObjC/arc-bridged-cast.m
index 9e716f9d40c..0ba7792146c 100644
--- a/clang/test/SemaObjC/arc-bridged-cast.m
+++ b/clang/test/SemaObjC/arc-bridged-cast.m
@@ -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;
+}
+
OpenPOWER on IntegriCloud