summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/ARCMigrate/TransProperties.cpp5
-rw-r--r--clang/test/ARCMT/assign-prop-with-arc-runtime.m8
-rw-r--r--clang/test/ARCMT/assign-prop-with-arc-runtime.m.result8
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
OpenPOWER on IntegriCloud