summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
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