diff options
author | Ted Kremenek <kremenek@apple.com> | 2011-12-20 01:03:40 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2011-12-20 01:03:40 +0000 |
commit | d9d12e0c0b1ad3ab6eafa18a454e1a72ce351dd2 (patch) | |
tree | acae7ef7bf683e7998cdbc94485aa7481c8620fe | |
parent | 305dc3ebaa0bea5f3b789e4b54afc79c25907615 (diff) |
Refine error diagnostic for using bridged casts when not using ARC.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146938 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/DiagnosticParseKinds.td | 4 | ||||
-rw-r--r-- | lib/Parse/ParseExpr.cpp | 7 | ||||
-rw-r--r-- | test/SemaObjC/illegal-nonarc-bridged-cast.m | 18 |
3 files changed, 15 insertions, 14 deletions
diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td index 7a3e0e6a71..0f5fb58ac7 100644 --- a/include/clang/Basic/DiagnosticParseKinds.td +++ b/include/clang/Basic/DiagnosticParseKinds.td @@ -326,8 +326,8 @@ def err_illegal_super_cast : Error< let CategoryName = "ARC Parse Issue" in { def err_arc_bridge_retain : Error< "unknown cast annotation __bridge_retain; did you mean __bridge_retained?">; -def err_arc_bridge_cast : Error< - "bridge casts will have no effect in non-arc mode">; +def err_arc_bridge_cast_nonarc : Error< + "'%0' casts are only allowed when using ARC">; } def err_objc_illegal_visibility_spec : Error< diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp index bb26e28c12..6fc2dec62f 100644 --- a/lib/Parse/ParseExpr.cpp +++ b/lib/Parse/ParseExpr.cpp @@ -1824,11 +1824,12 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, Tok.is(tok::kw___bridge_retained) || Tok.is(tok::kw___bridge_retain))); if (BridgeCast && !getLang().ObjCAutoRefCount) { + StringRef BridgeCastName = Tok.getName(); SourceLocation BridgeKeywordLoc = ConsumeToken(); if (!PP.getSourceManager().isInSystemHeader(BridgeKeywordLoc)) - Diag(BridgeKeywordLoc, diag::err_arc_bridge_cast) - << FixItHint::CreateReplacement(BridgeKeywordLoc, - ""); + Diag(BridgeKeywordLoc, diag::err_arc_bridge_cast_nonarc) + << BridgeCastName + << FixItHint::CreateReplacement(BridgeKeywordLoc, ""); BridgeCast = false; } diff --git a/test/SemaObjC/illegal-nonarc-bridged-cast.m b/test/SemaObjC/illegal-nonarc-bridged-cast.m index 53613dcb44..b0d1e82475 100644 --- a/test/SemaObjC/illegal-nonarc-bridged-cast.m +++ b/test/SemaObjC/illegal-nonarc-bridged-cast.m @@ -16,19 +16,19 @@ id CreateSomething(); NSString *CreateNSString(); void from_cf() { - id obj1 = (__bridge_transfer id)CFCreateSomething(); // expected-error {{bridge casts will have no effect in non-arc mode}} - id obj2 = (__bridge_transfer NSString*)CFCreateString(); // expected-error {{bridge casts will have no effect in non-arc mode}} - (__bridge int*)CFCreateSomething(); // expected-error {{bridge casts will have no effect in non-arc mode}} \ + id obj1 = (__bridge_transfer id)CFCreateSomething(); // expected-error {{'__bridge_transfer' casts are only allowed when using ARC}} + id obj2 = (__bridge_transfer NSString*)CFCreateString(); // expected-error {{'__bridge_transfer' casts are only allowed when using ARC}} + (__bridge int*)CFCreateSomething(); // expected-error {{'__bridge' casts are only allowed when using ARC}} \ // expected-warning {{expression result unused}} - id obj3 = (__bridge id)CFGetSomething(); // expected-error {{bridge casts will have no effect in non-arc mode}} - id obj4 = (__bridge NSString*)CFGetString(); // expected-error {{bridge casts will have no effect in non-arc mode}} + id obj3 = (__bridge id)CFGetSomething(); // expected-error {{'__bridge' casts are only allowed when using ARC}} + id obj4 = (__bridge NSString*)CFGetString(); // expected-error {{'__bridge' casts are only allowed when using ARC}} } void to_cf(id obj) { - CFTypeRef cf1 = (__bridge_retained CFTypeRef)CreateSomething(); // expected-error {{bridge casts will have no effect in non-arc mode}} - CFStringRef cf2 = (__bridge_retained CFStringRef)CreateNSString(); // expected-error {{bridge casts will have no effect in non-arc mode}} - CFTypeRef cf3 = (__bridge CFTypeRef)CreateSomething(); // expected-error {{bridge casts will have no effect in non-arc mode}} - CFStringRef cf4 = (__bridge CFStringRef)CreateNSString(); // expected-error {{bridge casts will have no effect in non-arc mode}} + CFTypeRef cf1 = (__bridge_retained CFTypeRef)CreateSomething(); // expected-error {{'__bridge_retained' casts are only allowed when using ARC}} + CFStringRef cf2 = (__bridge_retained CFStringRef)CreateNSString(); // expected-error {{'__bridge_retained' casts are only allowed when using ARC}} + CFTypeRef cf3 = (__bridge CFTypeRef)CreateSomething(); // expected-error {{'__bridge' casts are only allowed when using ARC}} + CFStringRef cf4 = (__bridge CFStringRef)CreateNSString(); // expected-error {{'__bridge' casts are only allowed when using ARC}} } void fixits() { |