[arcmt] Take into account that all properties are strong-by-default now and fix the test.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144146 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Argyrios Kyrtzidis 2011-11-08 23:09:34 +00:00
Родитель a5493f8850
Коммит 8b08eb3456
3 изменённых файлов: 13 добавлений и 50 удалений

Просмотреть файл

@ -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,9 +192,6 @@ 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);
}
@ -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;
}
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);
}

Просмотреть файл

@ -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;

Просмотреть файл

@ -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