summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2015-01-23 19:23:42 +0000
committerFariborz Jahanian <fjahanian@apple.com>2015-01-23 19:23:42 +0000
commit30609b8a78c150e6e70e39e083f5274eb82a77ef (patch)
tree528d2be6e55177fa673b9f6f6e82d5e5a3c01da1 /clang
parentf1397fa7d799bee470816c31f4f75235ba1bab08 (diff)
downloadbcm5719-llvm-30609b8a78c150e6e70e39e083f5274eb82a77ef.tar.gz
bcm5719-llvm-30609b8a78c150e6e70e39e083f5274eb82a77ef.zip
Objective-C modernizer. Avoid using property-dot syntax when
receiver type is not valid for property-dot syntz use. rdar://19381786 llvm-svn: 226927
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/ARCMigrate/ObjCMT.cpp4
-rw-r--r--clang/test/ARCMT/objcmt-property-dot-syntax.m22
-rw-r--r--clang/test/ARCMT/objcmt-property-dot-syntax.m.result22
3 files changed, 48 insertions, 0 deletions
diff --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp
index 52c424c000f..48a4931c207 100644
--- a/clang/lib/ARCMigrate/ObjCMT.cpp
+++ b/clang/lib/ARCMigrate/ObjCMT.cpp
@@ -245,6 +245,10 @@ namespace {
(Msg->getReceiverKind() != ObjCMessageExpr::Instance &&
Msg->getReceiverKind() != ObjCMessageExpr::SuperInstance))
return false;
+ if (const Expr *Receiver = Msg->getInstanceReceiver())
+ if (Receiver->getType()->isObjCBuiltinType())
+ return false;
+
const ObjCMethodDecl *Method = Msg->getMethodDecl();
if (!Method)
return false;
diff --git a/clang/test/ARCMT/objcmt-property-dot-syntax.m b/clang/test/ARCMT/objcmt-property-dot-syntax.m
index aaa3ea19818..f1038a844b4 100644
--- a/clang/test/ARCMT/objcmt-property-dot-syntax.m
+++ b/clang/test/ARCMT/objcmt-property-dot-syntax.m
@@ -68,3 +68,25 @@ P* fun();
id testRdar19038838(Rdar19038838 *obj) {
return [obj newItem];
}
+
+// rdar://19381786
+@interface rdar19381786 : NSObject
+{
+ rdar19381786* obj;
+}
+@property int count;
+@end
+
+@protocol PR
+@property int count;
+@end
+
+@implementation rdar19381786
+-(void)test:(id)some : (id<PR>)qsome : (SEL)selsome
+{
+ [obj setCount : 100];
+ [some setCount : [some count]];
+ [qsome setCount : [qsome count]];
+}
+@end
+
diff --git a/clang/test/ARCMT/objcmt-property-dot-syntax.m.result b/clang/test/ARCMT/objcmt-property-dot-syntax.m.result
index 44b7cf10759..b7561e526d0 100644
--- a/clang/test/ARCMT/objcmt-property-dot-syntax.m.result
+++ b/clang/test/ARCMT/objcmt-property-dot-syntax.m.result
@@ -68,3 +68,25 @@ P* fun();
id testRdar19038838(Rdar19038838 *obj) {
return obj.newItem;
}
+
+// rdar://19381786
+@interface rdar19381786 : NSObject
+{
+ rdar19381786* obj;
+}
+@property int count;
+@end
+
+@protocol PR
+@property int count;
+@end
+
+@implementation rdar19381786
+-(void)test:(id)some : (id<PR>)qsome : (SEL)selsome
+{
+ obj.count = 100;
+ [some setCount : [some count]];
+ [qsome setCount : [qsome count]];
+}
+@end
+
OpenPOWER on IntegriCloud