diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/ARCMigrate/TransProperties.cpp | 5 | ||||
-rw-r--r-- | clang/test/ARCMT/assign-prop-with-arc-runtime.m | 8 | ||||
-rw-r--r-- | clang/test/ARCMT/assign-prop-with-arc-runtime.m.result | 8 |
3 files changed, 13 insertions, 8 deletions
diff --git a/clang/lib/ARCMigrate/TransProperties.cpp b/clang/lib/ARCMigrate/TransProperties.cpp index 943eea26463..1ce02b11ef4 100644 --- a/clang/lib/ARCMigrate/TransProperties.cpp +++ b/clang/lib/ARCMigrate/TransProperties.cpp @@ -330,6 +330,11 @@ private: if (RE->getDecl() != Ivar) return true; + if (ObjCMessageExpr * + ME = dyn_cast<ObjCMessageExpr>(E->getRHS()->IgnoreParenCasts())) + if (ME->getMethodFamily() == OMF_retain) + return false; + ImplicitCastExpr *implCE = dyn_cast<ImplicitCastExpr>(E->getRHS()); while (implCE && implCE->getCastKind() == CK_BitCast) implCE = dyn_cast<ImplicitCastExpr>(implCE->getSubExpr()); diff --git a/clang/test/ARCMT/assign-prop-with-arc-runtime.m b/clang/test/ARCMT/assign-prop-with-arc-runtime.m index 1671d6d0203..b328bfe1583 100644 --- a/clang/test/ARCMT/assign-prop-with-arc-runtime.m +++ b/clang/test/ARCMT/assign-prop-with-arc-runtime.m @@ -32,20 +32,20 @@ typedef _NSCachedAttributedString *BadClassForWeak; @property Forw *not_safe3; @property (readonly) Foo *assign_plus1; @property (readonly) Foo *assign_plus2; +@property (readonly) Foo *assign_plus3; @property (assign) Foo *no_user_ivar1; @property (readonly) Foo *no_user_ivar2; - --(void)test; @end @implementation Foo @synthesize x,w,q1,q2,oo,bcw,not_safe1,not_safe2,not_safe3; @synthesize no_user_ivar1, no_user_ivar2; -@synthesize assign_plus1, assign_plus2; +@synthesize assign_plus1, assign_plus2, assign_plus3; --(void)test { +-(void)test:(Foo *)parm { assign_plus1 = [[Foo alloc] init]; assign_plus2 = [Foo new]; + assign_plus3 = [parm retain]; } @end diff --git a/clang/test/ARCMT/assign-prop-with-arc-runtime.m.result b/clang/test/ARCMT/assign-prop-with-arc-runtime.m.result index d30a2ac00be..3dd903ea5b9 100644 --- a/clang/test/ARCMT/assign-prop-with-arc-runtime.m.result +++ b/clang/test/ARCMT/assign-prop-with-arc-runtime.m.result @@ -32,20 +32,20 @@ typedef _NSCachedAttributedString *BadClassForWeak; @property (unsafe_unretained) Forw *not_safe3; @property (readonly) Foo *assign_plus1; @property (strong, readonly) Foo *assign_plus2; +@property (strong, readonly) Foo *assign_plus3; @property (weak) Foo *no_user_ivar1; @property (weak, readonly) Foo *no_user_ivar2; - --(void)test; @end @implementation Foo @synthesize x,w,q1,q2,oo,bcw,not_safe1,not_safe2,not_safe3; @synthesize no_user_ivar1, no_user_ivar2; -@synthesize assign_plus1, assign_plus2; +@synthesize assign_plus1, assign_plus2, assign_plus3; --(void)test { +-(void)test:(Foo *)parm { assign_plus1 = [[Foo alloc] init]; assign_plus2 = [Foo new]; + assign_plus3 = parm; } @end |