diff options
| author | Fariborz Jahanian <fjahanian@apple.com> | 2013-11-20 22:55:41 +0000 |
|---|---|---|
| committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-11-20 22:55:41 +0000 |
| commit | 1f92b7f7c468605899bbfda14b1363de71eaa2e3 (patch) | |
| tree | 1f703a6abffcfb98c3dc158062644a505e4c9897 /clang/lib/Sema | |
| parent | b80f94b41cdcfa5f9cc17f4ffbfc02ecd654ef2a (diff) | |
| download | bcm5719-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.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, |

