diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Sema/SemaDeclObjC.cpp | 11 | 
1 files changed, 10 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;  } | 

