diff options
Diffstat (limited to 'lib/Sema/SemaObjCProperty.cpp')
-rw-r--r-- | lib/Sema/SemaObjCProperty.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/lib/Sema/SemaObjCProperty.cpp b/lib/Sema/SemaObjCProperty.cpp index 02bfbe7e39..7659062905 100644 --- a/lib/Sema/SemaObjCProperty.cpp +++ b/lib/Sema/SemaObjCProperty.cpp @@ -66,6 +66,18 @@ Sema::DeclPtrTy Sema::ActOnProperty(Scope *S, SourceLocation AtLoc, Attributes, T, MethodImplKind)); } +static ObjCPropertyDecl *findPropertyDecl(DeclContext *DC, + IdentifierInfo *propertyID) { + + DeclContext::lookup_iterator I, E; + llvm::tie(I, E) = DC->lookup(propertyID); + for ( ; I != E; ++I) + if (ObjCPropertyDecl *PD = dyn_cast<ObjCPropertyDecl>(*I)) + return PD; + + return 0; +} + Sema::DeclPtrTy Sema::HandlePropertyInClassExtension(Scope *S, ObjCCategoryDecl *CDecl, SourceLocation AtLoc, FieldDeclarator &FD, @@ -79,12 +91,11 @@ Sema::HandlePropertyInClassExtension(Scope *S, ObjCCategoryDecl *CDecl, // Diagnose if this property is already in continuation class. DeclContext *DC = cast<DeclContext>(CDecl); - IdentifierInfo *PropertyId = FD.D.getIdentifier(); - DeclContext::lookup_result Found = DC->lookup(PropertyId); - if (Found.first != Found.second && isa<ObjCPropertyDecl>(*Found.first)) { + + if (ObjCPropertyDecl *prevDecl = findPropertyDecl(DC, PropertyId)) { Diag(AtLoc, diag::err_duplicate_property); - Diag((*Found.first)->getLocation(), diag::note_property_declare); + Diag(prevDecl->getLocation(), diag::note_property_declare); return DeclPtrTy(); } @@ -220,10 +231,9 @@ ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, FD.D.getIdentifierLoc(), PropertyId, AtLoc, T); - DeclContext::lookup_result Found = DC->lookup(PropertyId); - if (Found.first != Found.second && isa<ObjCPropertyDecl>(*Found.first)) { + if (ObjCPropertyDecl *prevDecl = findPropertyDecl(DC, PropertyId)) { Diag(PDecl->getLocation(), diag::err_duplicate_property); - Diag((*Found.first)->getLocation(), diag::note_property_declare); + Diag(prevDecl->getLocation(), diag::note_property_declare); PDecl->setInvalidDecl(); } else |