[cfe-commits] r160902 - in /cfe/trunk: lib/Sema/SemaExprObjC.cpp test/SemaObjC/arc-bridged-cast.m test/SemaObjC/arc-cf.m
Jordan Rose
jordan_rose at apple.com
Fri Jul 27 16:59:18 PDT 2012
Awesome! One last comment…this now handles ACC* possibilities ACC_plusOne, ACC_plusZero, and ACC_invalid, but not ACC_bottom, in which it doesn't matter which cast we use. We might as well just use __bridge, since it's not standard convention to CFRelease strings created with CFSTR.
On Jul 27, 2012, at 16:55 , Fariborz Jahanian <fjahanian at apple.com> wrote:
> Author: fjahanian
> Date: Fri Jul 27 18:55:46 2012
> New Revision: 160902
>
> URL: http://llvm.org/viewvc/llvm-project?rev=160902&view=rev
> Log:
> objc-arc: change per Jordy's comments.
> // rdar://11923822
>
> Modified:
> cfe/trunk/lib/Sema/SemaExprObjC.cpp
> cfe/trunk/test/SemaObjC/arc-bridged-cast.m
> cfe/trunk/test/SemaObjC/arc-cf.m
>
> Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprObjC.cpp?rev=160902&r1=160901&r2=160902&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaExprObjC.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExprObjC.cpp Fri Jul 27 18:55:46 2012
> @@ -2670,21 +2670,22 @@
> // now we're not going to permit implicit handling of +1 results,
> // because it's a bit frightening.
> if (fn->hasAttr<CFReturnsRetainedAttr>())
> - return ACC_invalid; // ACC_plusOne if we start accepting this
> + return Diagnose ? ACC_plusOne
> + : ACC_invalid; // ACC_plusOne if we start accepting this
>
> // Recognize this specific builtin function, which is used by CFSTR.
> unsigned builtinID = fn->getBuiltinID();
> if (builtinID == Builtin::BI__builtin___CFStringMakeConstantString)
> return ACC_bottom;
>
> + // Otherwise, don't do anything implicit with an unaudited function.
> + if (!fn->hasAttr<CFAuditedTransferAttr>())
> + return ACC_invalid;
> +
> // Otherwise, it's +0 unless it follows the create convention.
> if (ento::coreFoundation::followsCreateRule(fn))
> return Diagnose ? ACC_plusOne
> : ACC_invalid; // ACC_plusOne if we start accepting this
> -
> - // Otherwise, don't do anything implicit with an unaudited function.
> - if (!fn->hasAttr<CFAuditedTransferAttr>())
> - return ACC_invalid;
>
> return ACC_plusZero;
> }
> @@ -2859,15 +2860,15 @@
> << castRange
> << castExpr->getSourceRange();
> bool br = S.isKnownName("CFBridgingRelease");
> - bool fCreateRule =
> - ARCCastChecker(S.Context, exprACTC, castACTC, true).Visit(castExpr)
> - == ACC_plusOne;
> - if (!fCreateRule)
> + ACCResult CreateRule =
> + ARCCastChecker(S.Context, exprACTC, castACTC, true).Visit(castExpr);
> + if (CreateRule != ACC_plusOne)
> {
> DiagnosticBuilder DiagB = S.Diag(noteLoc, diag::note_arc_bridge);
> addFixitForObjCARCConversion(S, DiagB, CCK, afterLParen,
> castType, castExpr, "__bridge ", 0);
> }
> + if (CreateRule != ACC_plusZero)
> {
> DiagnosticBuilder DiagB = S.Diag(br ? castExpr->getExprLoc() : noteLoc,
> diag::note_arc_bridge_transfer)
> @@ -2891,15 +2892,15 @@
> << castType
> << castRange
> << castExpr->getSourceRange();
> - bool fCreateRule =
> - ARCCastChecker(S.Context, exprACTC, castACTC, true).Visit(castExpr)
> - == ACC_plusOne;
> - if (!fCreateRule)
> + ACCResult CreateRule =
> + ARCCastChecker(S.Context, exprACTC, castACTC, true).Visit(castExpr);
> + if (CreateRule != ACC_plusOne)
> {
> DiagnosticBuilder DiagB = S.Diag(noteLoc, diag::note_arc_bridge);
> addFixitForObjCARCConversion(S, DiagB, CCK, afterLParen,
> castType, castExpr, "__bridge ", 0);
> }
> + if (CreateRule != ACC_plusZero)
> {
> DiagnosticBuilder DiagB = S.Diag(br ? castExpr->getExprLoc() : noteLoc,
> diag::note_arc_bridge_retained)
>
> Modified: cfe/trunk/test/SemaObjC/arc-bridged-cast.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/arc-bridged-cast.m?rev=160902&r1=160901&r2=160902&view=diff
> ==============================================================================
> --- cfe/trunk/test/SemaObjC/arc-bridged-cast.m (original)
> +++ cfe/trunk/test/SemaObjC/arc-bridged-cast.m Fri Jul 27 18:55:46 2012
> @@ -38,7 +38,7 @@
>
> CFTypeRef fixits() {
> id obj1 = (id)CFCreateSomething(); // expected-error{{cast of C pointer type 'CFTypeRef' (aka 'const void *') to Objective-C pointer type 'id' requires a bridged cast}} \
> - // expected-note{{use CFBridgingRelease call to transfer ownership of a +1 'CFTypeRef' (aka 'const void *') into ARC}}
> + // expected-note{{use __bridge to convert directly (no change in ownership)}} expected-note{{use CFBridgingRelease call to transfer ownership of a +1 'CFTypeRef' (aka 'const void *') into ARC}}
> // CHECK: fix-it:"{{.*}}":{40:17-40:17}:"CFBridgingRelease("
> // CHECK: fix-it:"{{.*}}":{40:36-40:36}:")"
>
>
> Modified: cfe/trunk/test/SemaObjC/arc-cf.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/arc-cf.m?rev=160902&r1=160901&r2=160902&view=diff
> ==============================================================================
> --- cfe/trunk/test/SemaObjC/arc-cf.m (original)
> +++ cfe/trunk/test/SemaObjC/arc-cf.m Fri Jul 27 18:55:46 2012
> @@ -10,7 +10,9 @@
> typedef const struct __CFString *CFStringRef;
>
> extern CFStringRef CFMakeString0(void);
> +#pragma clang arc_cf_code_audited begin
> extern CFStringRef CFCreateString0(void);
> +#pragma clang arc_cf_code_audited end
> void test0() {
> id x;
> x = (id) CFMakeString0(); // expected-error {{requires a bridged cast}} expected-note {{__bridge to convert directly}} expected-note {{CFBridgingRelease call to transfer}}
> @@ -22,7 +24,7 @@
> void test1() {
> id x;
> x = (id) CFMakeString1();
> - x = (id) CFCreateString1(); // expected-error {{requires a bridged cast}} expected-note {{__bridge to convert directly}} expected-note {{CFBridgingRelease call to transfer}}
> + x = (id) CFCreateString1(); // expected-error {{requires a bridged cast}} expected-note {{CFBridgingRelease call to transfer}}
> }
>
> #define CF_AUDIT_BEGIN _Pragma("clang arc_cf_code_audited begin")
> @@ -40,6 +42,6 @@
> id x;
> x = (id) CFMakeString2();
> x = (id) CFCreateString2();
> - x = (id) CFMakeString3(); // expected-error {{requires a bridged cast}} expected-note {{__bridge to convert directly}} expected-note {{CFBridgingRelease call to transfer}}
> + x = (id) CFMakeString3(); // expected-error {{requires a bridged cast}} expected-note {{CFBridgingRelease call to transfer}}
> x = (id) CFCreateString3(); // expected-error {{requires a bridged cast}} expected-note {{CFBridgingRelease call to transfer}}
> }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list