diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2012-01-21 00:43:53 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2012-01-21 00:43:53 +0000 |
commit | 1630c15b0fa1cfa191ec34a4db7f6d5a17434c6d (patch) | |
tree | 844fe4965d127bc5b81ef2323ca122a93936c271 /clang/lib/ARCMigrate/TransProperties.cpp | |
parent | 3aa55267c480f2755b14f2d3005f86202a2d8a0a (diff) | |
download | bcm5719-llvm-1630c15b0fa1cfa191ec34a4db7f6d5a17434c6d.tar.gz bcm5719-llvm-1630c15b0fa1cfa191ec34a4db7f6d5a17434c6d.zip |
arg migrator: change all "assign" of object properties
to "strong" when migrating from GC. // rdar://10532449
llvm-svn: 148607
Diffstat (limited to 'clang/lib/ARCMigrate/TransProperties.cpp')
-rw-r--r-- | clang/lib/ARCMigrate/TransProperties.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/clang/lib/ARCMigrate/TransProperties.cpp b/clang/lib/ARCMigrate/TransProperties.cpp index b36acbb205d..7eb2a9bfc7e 100644 --- a/clang/lib/ARCMigrate/TransProperties.cpp +++ b/clang/lib/ARCMigrate/TransProperties.cpp @@ -201,10 +201,8 @@ private: bool HasIvarAssignedAPlusOneObject = hasIvarAssignedAPlusOneObject(props); if (propAttrs & ObjCPropertyDecl::OBJC_PR_assign) { - if (HasIvarAssignedAPlusOneObject || - (Pass.isGCMigration() && !hasGCWeak(props, atLoc))) { + if (HasIvarAssignedAPlusOneObject) return doPropAction(PropAction_AssignRemoved, props, atLoc); - } return doPropAction(PropAction_AssignRewritten, props, atLoc); } @@ -231,19 +229,23 @@ private: void rewriteAssign(PropsTy &props, SourceLocation atLoc) const { bool canUseWeak = canApplyWeak(Pass.Ctx, getPropertyType(props), /*AllowOnUnknownClass=*/Pass.isGCMigration()); + const char *toWhich = + (Pass.isGCMigration() && !hasGCWeak(props, atLoc)) ? "strong" : + (canUseWeak ? "weak" : "unsafe_unretained"); - bool rewroteAttr = rewriteAttribute("assign", - canUseWeak ? "weak" : "unsafe_unretained", - atLoc); + bool rewroteAttr = rewriteAttribute("assign", toWhich, atLoc); if (!rewroteAttr) canUseWeak = false; for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) { if (isUserDeclared(I->IvarD)) { if (I->IvarD && - I->IvarD->getType().getObjCLifetime() != Qualifiers::OCL_Weak) - Pass.TA.insert(I->IvarD->getLocation(), - canUseWeak ? "__weak " : "__unsafe_unretained "); + I->IvarD->getType().getObjCLifetime() != Qualifiers::OCL_Weak) { + const char *toWhich = + (Pass.isGCMigration() && !hasGCWeak(props, atLoc)) ? "__strong " : + (canUseWeak ? "__weak " : "__unsafe_unretained "); + Pass.TA.insert(I->IvarD->getLocation(), toWhich); + } } if (I->ImplD) Pass.TA.clearDiagnostic(diag::err_arc_assign_property_ownership, |