diff options
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaExprObjC.cpp | 9 |
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, |

