herzka created this revision. Before this fix, trying to set a class property using dot syntax would always use the constructed name (setX:), which might not match the real selector if the setter is specified via the `setter` property attribute. Now, the setter selector in the declaration has priority over the constructed name, which is consistent with instance properties.
https://reviews.llvm.org/D29967 Files: lib/Sema/SemaExprObjC.cpp Index: lib/Sema/SemaExprObjC.cpp =================================================================== --- lib/Sema/SemaExprObjC.cpp +++ lib/Sema/SemaExprObjC.cpp @@ -2000,10 +2000,16 @@ } // Look for the matching setter, in case it is needed. - Selector SetterSel = - SelectorTable::constructSetterSelector(PP.getIdentifierTable(), - PP.getSelectorTable(), - &propertyName); + Selector SetterSel; + if (ObjCPropertyDecl *PD = IFace->FindPropertyDeclaration( + &propertyName, ObjCPropertyQueryKind::OBJC_PR_query_class)) { + SetterSel = PD->getSetterName(); + } else { + SetterSel = + SelectorTable::constructSetterSelector(PP.getIdentifierTable(), + PP.getSelectorTable(), + &propertyName); + } ObjCMethodDecl *Setter = IFace->lookupClassMethod(SetterSel); if (!Setter) {
Index: lib/Sema/SemaExprObjC.cpp =================================================================== --- lib/Sema/SemaExprObjC.cpp +++ lib/Sema/SemaExprObjC.cpp @@ -2000,10 +2000,16 @@ } // Look for the matching setter, in case it is needed. - Selector SetterSel = - SelectorTable::constructSetterSelector(PP.getIdentifierTable(), - PP.getSelectorTable(), - &propertyName); + Selector SetterSel; + if (ObjCPropertyDecl *PD = IFace->FindPropertyDeclaration( + &propertyName, ObjCPropertyQueryKind::OBJC_PR_query_class)) { + SetterSel = PD->getSetterName(); + } else { + SetterSel = + SelectorTable::constructSetterSelector(PP.getIdentifierTable(), + PP.getSelectorTable(), + &propertyName); + } ObjCMethodDecl *Setter = IFace->lookupClassMethod(SetterSel); if (!Setter) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits