diff options
-rw-r--r-- | clang/lib/ARCMigrate/ObjCMT.cpp | 14 | ||||
-rw-r--r-- | clang/test/ARCMT/objcmt-property.m | 3 | ||||
-rw-r--r-- | clang/test/ARCMT/objcmt-property.m.result | 3 |
3 files changed, 13 insertions, 7 deletions
diff --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp index f35e981d94e..ac423c2f268 100644 --- a/clang/lib/ARCMigrate/ObjCMT.cpp +++ b/clang/lib/ARCMigrate/ObjCMT.cpp @@ -343,12 +343,9 @@ static void rewriteToObjCProperty(const ObjCMethodDecl *Getter, PropertyString += PropertyNameString; } // Property with no setter may be suggested as a 'readonly' property. - if (!Setter) { + if (!Setter) append_attr(PropertyString, "readonly", LParenAdded); - QualType ResType = Context.getCanonicalType(Getter->getResultType()); - if (const char *MemoryManagementAttr = PropertyMemoryAttribute(Context, ResType)) - append_attr(PropertyString, MemoryManagementAttr, LParenAdded); - } + // Short circuit 'delegate' properties that contain the name "delegate" or // "dataSource", or have exact name "target" to have 'assign' attribute. @@ -358,8 +355,11 @@ static void rewriteToObjCProperty(const ObjCMethodDecl *Getter, QualType QT = Getter->getResultType(); if (!QT->isRealType()) append_attr(PropertyString, "assign", LParenAdded); - } - else if (Setter) { + } else if (!Setter) { + QualType ResType = Context.getCanonicalType(Getter->getResultType()); + if (const char *MemoryManagementAttr = PropertyMemoryAttribute(Context, ResType)) + append_attr(PropertyString, MemoryManagementAttr, LParenAdded); + } else { const ParmVarDecl *argDecl = *Setter->param_begin(); QualType ArgType = Context.getCanonicalType(argDecl->getType()); if (const char *MemoryManagementAttr = PropertyMemoryAttribute(Context, ArgType)) diff --git a/clang/test/ARCMT/objcmt-property.m b/clang/test/ARCMT/objcmt-property.m index 3b77aadb892..61739efe0ab 100644 --- a/clang/test/ARCMT/objcmt-property.m +++ b/clang/test/ARCMT/objcmt-property.m @@ -70,6 +70,9 @@ typedef char BOOL; - (id) dataSource; +// rdar://15509831 +- (id)delegate; + - (id)xxxdelegateYYY; - (void)setXxxdelegateYYY:(id)delegate; diff --git a/clang/test/ARCMT/objcmt-property.m.result b/clang/test/ARCMT/objcmt-property.m.result index 1a82cb20525..eb2f5fea908 100644 --- a/clang/test/ARCMT/objcmt-property.m.result +++ b/clang/test/ARCMT/objcmt-property.m.result @@ -61,6 +61,9 @@ typedef char BOOL; @property (nonatomic, assign) id dataSource; +// rdar://15509831 +@property (nonatomic, readonly, assign) id delegate; + @property (nonatomic, assign) id xxxdelegateYYY; |