diff options
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticGroups.td | 1 | ||||
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticSemaKinds.td | 5 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaExprObjC.cpp | 21 | ||||
| -rw-r--r-- | clang/test/SemaObjC/arc-cfbridge-warning.m | 41 | 
4 files changed, 5 insertions, 63 deletions
diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td index 0f25a1523b0..7a813b08a8b 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -422,7 +422,6 @@ def : DiagGroup<"arc-abi">;  def ARCUnsafeRetainedAssign : DiagGroup<"arc-unsafe-retained-assign">;  def ARCRetainCycles : DiagGroup<"arc-retain-cycles">;  def ARCNonPodMemAccess : DiagGroup<"arc-non-pod-memaccess">; -def ARCBridgeCastRelease : DiagGroup<"arc-bridge-cast-release">;  def AutomaticReferenceCounting : DiagGroup<"arc",                                             [ARCUnsafeRetainedAssign,                                              ARCRetainCycles, diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 292c104a24d..d05f94b4446 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -4459,11 +4459,6 @@ def note_arc_retain_cycle_owner : Note<  def warn_arc_object_memaccess : Warning<    "%select{destination for|source of}0 this %1 call is a pointer to "    "ownership-qualified type %2">, InGroup<ARCNonPodMemAccess>; -   -def warn_arc_consumed_object_released : Warning< -  "__bridge cast of collection literal of type %1 to bridgeable " -  "type %0 causes early release of the collection">, -  InGroup<ARCBridgeCastRelease>, DefaultError;  let CategoryName = "ARC and @properties" in { diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index 5746e732943..40ab95b6ec5 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -4075,22 +4075,11 @@ ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc,      // Okay: id -> CF      CK = CK_BitCast;      switch (Kind) { -      case OBC_Bridge: { -        const ImplicitCastExpr *implCE = dyn_cast<ImplicitCastExpr>(SubExpr); -        while (implCE && implCE->getCastKind() ==  CK_BitCast) -          implCE = dyn_cast<ImplicitCastExpr>(implCE->getSubExpr()); -        if (implCE && (implCE->getCastKind() == CK_ARCConsumeObject)) -          if (const Expr *LitExp = implCE->getSubExpr()) -            if ((isa<ObjCArrayLiteral>(LitExp) || -                 isa<ObjCDictionaryLiteral>(LitExp)) && -                T->isCARCBridgableType()) -              Diag(BridgeKeywordLoc, diag::warn_arc_consumed_object_released) -                << T << implCE->getType(); -        // Reclaiming a value that's going to be __bridge-casted to CF -        // is very dangerous, so we don't do it. -        SubExpr = maybeUndoReclaimObject(SubExpr); -        break; -      } +    case OBC_Bridge: +      // Reclaiming a value that's going to be __bridge-casted to CF +      // is very dangerous, so we don't do it. +      SubExpr = maybeUndoReclaimObject(SubExpr); +      break;      case OBC_BridgeRetained:                // Produce the object before casting it. diff --git a/clang/test/SemaObjC/arc-cfbridge-warning.m b/clang/test/SemaObjC/arc-cfbridge-warning.m index 1077fb07ef4..e69de29bb2d 100644 --- a/clang/test/SemaObjC/arc-cfbridge-warning.m +++ b/clang/test/SemaObjC/arc-cfbridge-warning.m @@ -1,41 +0,0 @@ -// RUN: %clang_cc1 -fsyntax-only -x objective-c -fobjc-arc -verify -Wno-objc-root-class %s -// rdar://18768214 - - -@class NSArray; -typedef const struct __attribute__((objc_bridge(NSArray))) __CFArray * CFArrayRef; -@class NSString; -typedef const void * CFTypeRef; - -typedef const struct __attribute__((objc_bridge(NSString))) __CFString * CFStringRef; - -typedef long NSInteger; -typedef unsigned long NSUInteger; - -@interface NSObject { -    Class isa __attribute__((deprecated)); -} -+ (void)initialize; -- (instancetype)init; -+ (instancetype)new; -+ (instancetype)alloc; -- (void)dealloc; -@end - -@interface NSArray : NSObject -@property (readonly) NSUInteger count; -- (id)objectAtIndex:(NSUInteger)index; -- (instancetype)init __attribute__((objc_designated_initializer)); -- (instancetype)initWithObjects:(const id [])objects count:(NSUInteger)cnt __attribute__((objc_designated_initializer)); -+ (instancetype)array; -+ (instancetype)arrayWithObject:(id)anObject; -+ (instancetype)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt; -+ (instancetype)arrayWithObjects:(id)firstObj, ... __attribute__((sentinel(0,1))); -@end - -static CFStringRef _s; - -CFArrayRef _array() -{ -    return (__bridge CFArrayRef)@[(__bridge NSString *)_s]; // expected-error {{__bridge cast of collection literal of type 'NSArray *' to bridgeable type 'CFArrayRef' (aka 'const struct __CFArray *') causes early release of the collection}} -}  | 

