diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Sema/SemaDeclObjC.cpp | 11 | ||||
| -rw-r--r-- | clang/test/SemaObjC/unsued-backing-ivar-warning.m | 25 | 
2 files changed, 35 insertions, 1 deletions
| diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp index 86979a1fe85..f44fb325114 100644 --- a/clang/lib/Sema/SemaDeclObjC.cpp +++ b/clang/lib/Sema/SemaDeclObjC.cpp @@ -3510,8 +3510,17 @@ Sema::GetIvarBackingPropertyAccessor(const ObjCMethodDecl *Method,    Method = IDecl->lookupMethod(Method->getSelector(), true);    if (!Method || !Method->isPropertyAccessor())      return 0; -  if ((PDecl = Method->findPropertyDecl())) +  if ((PDecl = Method->findPropertyDecl())) { +    if (!PDecl->getDeclContext()) +      return 0; +    // Make sure property belongs to accessor's class and not to +    // one of its super classes. +    if (const ObjCInterfaceDecl *CID = +        dyn_cast<ObjCInterfaceDecl>(PDecl->getDeclContext())) +      if (CID != IDecl) +        return 0;      return PDecl->getPropertyIvarDecl(); +  }    return 0;  } diff --git a/clang/test/SemaObjC/unsued-backing-ivar-warning.m b/clang/test/SemaObjC/unsued-backing-ivar-warning.m index 2f55efabcd6..c07dea71a7e 100644 --- a/clang/test/SemaObjC/unsued-backing-ivar-warning.m +++ b/clang/test/SemaObjC/unsued-backing-ivar-warning.m @@ -49,3 +49,28 @@      okIvar = newT;  }  @end + +// rdar://15473432 +typedef char BOOL; +@interface CalDAVServerVersion { +  BOOL _supportsTimeRangeFilterWithoutEndDate; +} +@property (nonatomic, readonly,nonatomic) BOOL supportsTimeRangeFilterWithoutEndDate; +@end + +@interface CalDAVConcreteServerVersion : CalDAVServerVersion { +} +@end + +@interface CalendarServerVersion : CalDAVConcreteServerVersion +@end + +@implementation CalDAVServerVersion +@synthesize supportsTimeRangeFilterWithoutEndDate=_supportsTimeRangeFilterWithoutEndDate; +@end + +@implementation CalendarServerVersion +-(BOOL)supportsTimeRangeFilterWithoutEndDate { +  return 0; +} +@end | 

