summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2013-11-20 22:55:41 +0000
committerFariborz Jahanian <fjahanian@apple.com>2013-11-20 22:55:41 +0000
commit1f92b7f7c468605899bbfda14b1363de71eaa2e3 (patch)
tree1f703a6abffcfb98c3dc158062644a505e4c9897 /clang/lib/Sema
parentb80f94b41cdcfa5f9cc17f4ffbfc02ecd654ef2a (diff)
downloadbcm5719-llvm-1f92b7f7c468605899bbfda14b1363de71eaa2e3.tar.gz
bcm5719-llvm-1f92b7f7c468605899bbfda14b1363de71eaa2e3.zip
ObjectiveC ARC. warn in presense of __bridge casting to
or from a toll free bridge cast. // rdar://15454846 llvm-svn: 195278
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/SemaExprObjC.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index 6a0c09a4db2..65f584f657b 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/lib/Sema/SemaExprObjC.cpp
@@ -3617,6 +3617,15 @@ ExprResult Sema::ActOnObjCBridgedCast(Scope *S,
Expr *SubExpr) {
TypeSourceInfo *TSInfo = 0;
QualType T = GetTypeFromParser(Type, &TSInfo);
+ if (Kind == OBC_Bridge) {
+ // warn in presense of __bridge casting to or from a toll free bridge cast.
+ ARCConversionTypeClass exprACTC = classifyTypeForARCConversion(SubExpr->getType());
+ ARCConversionTypeClass castACTC = classifyTypeForARCConversion(T);
+ if (castACTC == ACTC_retainable && exprACTC == ACTC_coreFoundation)
+ (void)CheckObjCBridgeNSCast(*this, T, SubExpr);
+ else if (castACTC == ACTC_coreFoundation && exprACTC == ACTC_retainable)
+ (void)CheckObjCBridgeCFCast(*this, T, SubExpr);
+ }
if (!TSInfo)
TSInfo = Context.getTrivialTypeSourceInfo(T, LParenLoc);
return BuildObjCBridgedCast(LParenLoc, Kind, BridgeKeywordLoc, TSInfo,
OpenPOWER on IntegriCloud