diff options
Diffstat (limited to 'lib/Sema/SemaExprObjC.cpp')
-rw-r--r-- | lib/Sema/SemaExprObjC.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index d3b803ab93..52e093c85b 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -1415,7 +1415,8 @@ HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, return ExprError(); // Search for a declared property first. - if (ObjCPropertyDecl *PD = IFace->FindPropertyDeclaration(Member)) { + ObjCPropertyDecl *PD = IFace->FindPropertyDeclaration(Member); + if (PD) { // Check whether we can reference this property. if (DiagnoseUseOfDecl(PD, MemberLoc)) return ExprError(); @@ -1483,6 +1484,10 @@ HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, SelectorTable::constructSetterName(PP.getIdentifierTable(), PP.getSelectorTable(), Member); ObjCMethodDecl *Setter = IFace->lookupInstanceMethod(SetterSel); + // Check for corner case of: @property int p; ... self.P = 0; + // setter name is synthesized "setP" but there is no property name 'P'. + if (Setter && Setter->isSynthesized() && !PD) + Setter = 0; // May be founf in property's qualified list. if (!Setter) |