]> granicus.if.org Git - clang/commitdiff
[arcmt] Take into account that all properties are strong-by-default now and fix the...
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 8 Nov 2011 23:09:34 +0000 (23:09 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 8 Nov 2011 23:09:34 +0000 (23:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144146 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ARCMigrate/TransProperties.cpp
test/ARCMT/assign-prop-with-arc-runtime.m
test/ARCMT/assign-prop-with-arc-runtime.m.result

index f9c02061343ffb04cb3535e9389042af900505fc..0686dd3c2e34e01308cb4bac9848ff07a4b12478 100644 (file)
@@ -50,11 +50,9 @@ class PropertiesRewriter {
   
   enum PropActionKind {
     PropAction_None,
-    PropAction_RetainToStrong,
     PropAction_RetainRemoved,
     PropAction_AssignRemoved,
     PropAction_AssignRewritten,
-    PropAction_MaybeAddStrong,
     PropAction_MaybeAddWeakOrUnsafe
   };
 
@@ -163,9 +161,6 @@ private:
     switch (kind) {
     case PropAction_None:
       return;
-    case PropAction_RetainToStrong:
-      rewriteAttribute("retain", "strong", atLoc);
-      return;
     case PropAction_RetainRemoved:
       removeAttribute("retain", atLoc);
       return;
@@ -173,8 +168,6 @@ private:
       return removeAssignForDefaultStrong(props, atLoc);
     case PropAction_AssignRewritten:
       return rewriteAssign(props, atLoc);
-    case PropAction_MaybeAddStrong:
-      return maybeAddStrongAttr(props, atLoc);
     case PropAction_MaybeAddWeakOrUnsafe:
       return maybeAddWeakOrUnsafeUnretainedAttr(props, atLoc);
     }
@@ -199,11 +192,8 @@ private:
       return;
 
     if (propAttrs & ObjCPropertyDecl::OBJC_PR_retain) {
-      if (propAttrs & ObjCPropertyDecl::OBJC_PR_readonly)
-        return doPropAction(PropAction_RetainToStrong, props, atLoc);
-      else
-        // strong is the default.
-        return doPropAction(PropAction_RetainRemoved, props, atLoc);
+      // strong is the default.
+      return doPropAction(PropAction_RetainRemoved, props, atLoc);
     }
 
     bool HasIvarAssignedAPlusOneObject = hasIvarAssignedAPlusOneObject(props);
@@ -258,17 +248,13 @@ private:
 
   void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props,
                                           SourceLocation atLoc) const {
-    ObjCPropertyDecl::PropertyAttributeKind propAttrs = getPropertyAttrs(props);
-
     bool canUseWeak = canApplyWeak(Pass.Ctx, getPropertyType(props),
                                   /*AllowOnUnknownClass=*/Pass.isGCMigration());
-    if (!(propAttrs & ObjCPropertyDecl::OBJC_PR_readonly) ||
-        !hasAllIvarsBacked(props)) {
-      bool addedAttr = addAttribute(canUseWeak ? "weak" : "unsafe_unretained",
-                                    atLoc);
-      if (!addedAttr)
-        canUseWeak = false;
-    }
+
+    bool addedAttr = addAttribute(canUseWeak ? "weak" : "unsafe_unretained",
+                                  atLoc);
+    if (!addedAttr)
+      canUseWeak = false;
 
     for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {
       if (isUserDeclared(I->IvarD))
@@ -284,27 +270,6 @@ private:
     }
   }
 
-  void maybeAddStrongAttr(PropsTy &props, SourceLocation atLoc) const {
-    ObjCPropertyDecl::PropertyAttributeKind propAttrs = getPropertyAttrs(props);
-
-    if (!(propAttrs & ObjCPropertyDecl::OBJC_PR_readonly))
-      return; // 'strong' by default.
-
-    if (!hasAllIvarsBacked(props)) {
-      addAttribute("strong", atLoc);
-    }
-
-    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {
-      if (I->ImplD) {
-        Pass.TA.clearDiagnostic(diag::err_arc_assign_property_ownership,
-                                I->ImplD->getLocation());
-        Pass.TA.clearDiagnostic(
-                           diag::err_arc_objc_property_default_assign_on_object,
-                           I->ImplD->getLocation());
-      }
-    }
-  }
-
   bool removeAttribute(StringRef fromAttr, SourceLocation atLoc) const {
     return rewriteAttribute(fromAttr, StringRef(), atLoc);
   }
index 8845010895063d5c87b318f46b42667e32506baa..8408a1858bd86320877b9ce93bfed12434ccf046 100644 (file)
@@ -14,8 +14,7 @@ typedef _NSCachedAttributedString *BadClassForWeak;
 @class Forw;
 
 @interface Foo : NSObject {
-  Foo *w, *q1, *q2;
-  __weak Foo *x;
+  Foo *x, *w, *q1, *q2;
   WeakOptOut *oo;
   BadClassForWeak bcw;
   id not_safe1;
@@ -23,7 +22,7 @@ typedef _NSCachedAttributedString *BadClassForWeak;
   Forw *not_safe3;
   Foo *assign_plus1;
 }
-@property (readonly) __weak Foo *x;
+@property (readonly) Foo *x;
 @property (assign) Foo *w;
 @property Foo *q1, *q2;
 @property (assign) WeakOptOut *oo;
index 7cb7e1722ba7083c6303337626ea82eae794ca14..56906f7002c5919ac93aa30ab44c1a52eb7e5a8a 100644 (file)
@@ -14,8 +14,7 @@ typedef _NSCachedAttributedString *BadClassForWeak;
 @class Forw;
 
 @interface Foo : NSObject {
-  Foo *__weak w, *__weak q1, *__weak q2;
-  __weak Foo *x;
+  Foo *__weak x, *__weak w, *__weak q1, *__weak q2;
   WeakOptOut *__unsafe_unretained oo;
   BadClassForWeak __unsafe_unretained bcw;
   id __unsafe_unretained not_safe1;
@@ -23,7 +22,7 @@ typedef _NSCachedAttributedString *BadClassForWeak;
   Forw *__unsafe_unretained not_safe3;
   Foo *assign_plus1;
 }
-@property (readonly) __weak Foo *x;
+@property (weak, readonly) Foo *x;
 @property (weak) Foo *w;
 @property (weak) Foo *q1, *q2;
 @property (unsafe_unretained) WeakOptOut *oo;
@@ -58,12 +57,12 @@ typedef _NSCachedAttributedString *BadClassForWeak;
 @end
 
 @interface TestExt
-@property (strong,readonly) TestExt *x1;
+@property (readonly) TestExt *x1;
 @property (weak, readonly) TestExt *x2;
 @end
 
 @interface TestExt()
-@property (strong,readwrite) TestExt *x1;
+@property (readwrite) TestExt *x1;
 @property (weak, readwrite) TestExt *x2;
 @end