]> granicus.if.org Git - clang/commitdiff
Replace all comparisons between ObjCInterfaceDecl pointers with calls
authorDouglas Gregor <dgregor@apple.com>
Thu, 15 Dec 2011 00:29:59 +0000 (00:29 +0000)
committerDouglas Gregor <dgregor@apple.com>
Thu, 15 Dec 2011 00:29:59 +0000 (00:29 +0000)
to declaresSameEntity(), as a baby step toward tracking forward
declarations of Objective-C classes precisely. Part of
<rdar://problem/10583531>.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146618 91177308-0d34-0410-b5e6-96231b3b80d8

12 files changed:
include/clang/AST/DeclObjC.h
lib/AST/ASTContext.cpp
lib/AST/ASTImporter.cpp
lib/CodeGen/CGObjCRuntime.cpp
lib/Index/Analyzer.cpp
lib/Rewrite/RewriteObjC.cpp
lib/Sema/SemaAccess.cpp
lib/Sema/SemaDeclObjC.cpp
lib/Sema/SemaExpr.cpp
lib/Sema/SemaExprMember.cpp
lib/Sema/SemaObjCProperty.cpp
lib/Sema/SemaOverload.cpp

index eb60b972270364a2bd03c546fe16b01725f56216..597eb456720c4f0ae07322234b3395a6fbfc63fa 100644 (file)
@@ -742,7 +742,7 @@ public:
   bool isSuperClassOf(const ObjCInterfaceDecl *I) const {
     // If RHS is derived from LHS it is OK; else it is not OK.
     while (I != NULL) {
-      if (this == I)
+      if (declaresSameEntity(this, I))
         return true;
       I = I->getSuperClass();
     }
index 32ef0b9c602e264771a8765f94985a3dc6247116..f65888fad8d89e31ee5d1597602ffb1e968c05da 100644 (file)
@@ -5469,7 +5469,7 @@ QualType ASTContext::areCommonBaseCompatible(
   const ObjCObjectType *RHS = Rptr->getObjectType();
   const ObjCInterfaceDecl* LDecl = LHS->getInterface();
   const ObjCInterfaceDecl* RDecl = RHS->getInterface();
-  if (!LDecl || !RDecl || (LDecl == RDecl))
+  if (!LDecl || !RDecl || (declaresSameEntity(LDecl, RDecl)))
     return QualType();
   
   do {
index 423f23d4e08289d15193ca7b430b5070aebfa9aa..e409f0a1d3f82975e144f9b70a71502cb1de5d81 100644 (file)
@@ -3373,7 +3373,7 @@ Decl *ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {
     if ((Super && !Impl->getSuperClass()) ||
         (!Super && Impl->getSuperClass()) ||
         (Super && Impl->getSuperClass() && 
-         Super->getCanonicalDecl() != Impl->getSuperClass())) {
+         !declaresSameEntity(Super->getCanonicalDecl(), Impl->getSuperClass()))) {
         Importer.ToDiag(Impl->getLocation(), 
                         diag::err_odr_objc_superclass_inconsistent)
           << Iface->getDeclName();
index bcacb8ea467702b7926633495ef149fc9f242b15..b92964d1a30bba1a28b46cd2e16a977597a2ab49 100644 (file)
@@ -41,7 +41,7 @@ static uint64_t LookupFieldBitOffset(CodeGen::CodeGenModule &CGM,
   // If we know have an implementation (and the ivar is in it) then
   // look up in the implementation layout.
   const ASTRecordLayout *RL;
-  if (ID && ID->getClassInterface() == Container)
+  if (ID && declaresSameEntity(ID->getClassInterface(), Container))
     RL = &CGM.getContext().getASTObjCImplementationLayout(ID);
   else
     RL = &CGM.getContext().getASTObjCInterfaceLayout(Container);
index 6be35ab4a37825513add2956ef3dd08e3861073c..f77e6ef92d68541047bbb82b6d3da1f22e8baa6d 100644 (file)
@@ -205,7 +205,7 @@ public:
     assert(MsgD);
 
     // Same interface ? We have a winner!
-    if (MsgD == IFace)
+    if (declaresSameEntity(MsgD, IFace))
       return true;
 
     // If the message interface is a superclass of the original interface,
@@ -220,7 +220,7 @@ public:
     if (IFace) {
       Selector Sel = Msg->getSelector();
       for (ObjCInterfaceDecl *Cls = MsgD; Cls; Cls = Cls->getSuperClass()) {
-        if (Cls == IFace)
+        if (declaresSameEntity(Cls, IFace))
           return true;
         if (Cls->getMethod(Sel, IsInstanceMethod))
           return false;
index f50282ef8b34b80499fbe5a4875942fe87cd6b0e..8635ed41bebadc18068d81eb9e9733f4ceb6cc60 100644 (file)
@@ -5938,7 +5938,7 @@ Stmt *RewriteObjCFragileABI::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) {
                                               OldRange.getEnd(),
                                               castExpr);
       if (IV->isFreeIvar() &&
-          CurMethodDef->getClassInterface() == iFaceDecl->getDecl()) {
+          declaresSameEntity(CurMethodDef->getClassInterface(), iFaceDecl->getDecl())) {
         MemberExpr *ME = new (Context) MemberExpr(PE, true, D,
                                                   IV->getLocation(),
                                                   D->getType(),
index 9bb8f616b64da412f09ecb1f73d30c4fe1beb16d..acc19d6c9263b698a7429372065de70fa38b4af9 100644 (file)
@@ -1701,7 +1701,7 @@ bool Sema::IsSimplyAccessible(NamedDecl *Decl, DeclContext *Ctx) {
       return false;
     
     // If we're inside the same interface that owns the ivar, we're fine.
-    if (ClassOfMethodDecl == Ivar->getContainingInterface())
+    if (declaresSameEntity(ClassOfMethodDecl, Ivar->getContainingInterface()))
       return true;
     
     // If the ivar is private, it's inaccessible.
index 5b8f749db784d8e3bcdf78078ad7b23cf5a4cfb4..b70c982955802beeb4849cd6feaea03c14decbe1 100644 (file)
@@ -417,7 +417,7 @@ ActOnStartClassInterface(SourceLocation AtInterfaceLoc,
           DeclarationNameInfo(SuperName, SuperLoc), LookupOrdinaryName, TUScope,
           NULL, NULL, false, CTC_NoKeywords);
       if ((PrevDecl = Corrected.getCorrectionDeclAs<ObjCInterfaceDecl>())) {
-        if (PrevDecl == IDecl) {
+        if (declaresSameEntity(PrevDecl, IDecl)) {
           // Don't correct to the class we're defining.
           PrevDecl = 0;
         } else {
@@ -429,7 +429,7 @@ ActOnStartClassInterface(SourceLocation AtInterfaceLoc,
       }
     }
 
-    if (PrevDecl == IDecl) {
+    if (declaresSameEntity(PrevDecl, IDecl)) {
       Diag(SuperLoc, diag::err_recursive_superclass)
         << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);
       IDecl->setLocEnd(ClassLoc);
@@ -924,7 +924,7 @@ Decl *Sema::ActOnStartClassImplementation(
       if (!SDecl)
         Diag(SuperClassLoc, diag::err_undef_superclass)
           << SuperClassname << ClassName;
-      else if (IDecl && IDecl->getSuperClass() != SDecl) {
+      else if (IDecl && !declaresSameEntity(IDecl->getSuperClass(), SDecl)) {
         // This implementation and its interface do not have the same
         // super class.
         Diag(SuperClassLoc, diag::err_conflicting_super_class)
@@ -2439,7 +2439,7 @@ CheckRelatedResultTypeCompatibility(Sema &S, ObjCMethodDecl *Method,
       if (ObjCInterfaceDecl *ResultClass 
                                       = ResultObjectType->getInterfaceDecl()) {
         //   - it is the same as the method's class type, or
-        if (CurrentClass == ResultClass)
+        if (declaresSameEntity(CurrentClass, ResultClass))
           return RTC_Compatible;
         
         //   - it is a superclass of the method's class type
index 8231cda75e78b3371e1191080ef6dbce36eaf539..c18d37df5f3fe9f9d00eaf8124b3fb22c93f84c8 100644 (file)
@@ -1975,7 +1975,7 @@ Sema::LookupInObjCMethod(LookupResult &Lookup, Scope *S,
 
       // Diagnose the use of an ivar outside of the declaring class.
       if (IV->getAccessControl() == ObjCIvarDecl::Private &&
-          ClassDeclared != IFace)
+          !declaresSameEntity(ClassDeclared, IFace))
         Diag(Loc, diag::error_private_ivar_access) << IV->getDeclName();
 
       // FIXME: This should use a new expr for a direct reference, don't
@@ -2005,7 +2005,7 @@ Sema::LookupInObjCMethod(LookupResult &Lookup, Scope *S,
       ObjCInterfaceDecl *ClassDeclared;
       if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(II, ClassDeclared)) {
         if (IV->getAccessControl() != ObjCIvarDecl::Private ||
-            IFace == ClassDeclared)
+            declaresSameEntity(IFace, ClassDeclared))
           Diag(Loc, diag::warn_ivar_use_hidden) << IV->getDeclName();
       }
     }
index da099681cbca44c4037382378dd168d2e9ab5192..03b1731d248bf12c02ae9fd5142a63450cdb4a70 100644 (file)
@@ -1150,8 +1150,8 @@ Sema::LookupMemberExpr(LookupResult &R, ExprResult &BaseExpr,
       }
 
       if (IV->getAccessControl() == ObjCIvarDecl::Private) {
-        if (ClassDeclared != IDecl ||
-            ClassOfMethodDecl != ClassDeclared)
+        if (!declaresSameEntity(ClassDeclared, IDecl) ||
+            !declaresSameEntity(ClassOfMethodDecl, ClassDeclared))
           Diag(MemberLoc, diag::error_private_ivar_access)
             << IV->getDeclName();
       } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))
index e754e7337798e9313eeac2a40fb310b76f3d5e72..7436745ad92a7abd47dc218218bab6194853832f 100644 (file)
@@ -690,7 +690,7 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S,
       // Note! I deliberately want it to fall thru so, we have a
       // a property implementation and to avoid future warnings.
     } else if (getLangOptions().ObjCNonFragileABI &&
-               ClassDeclared != IDecl) {
+               !declaresSameEntity(ClassDeclared, IDecl)) {
       Diag(PropertyLoc, diag::error_ivar_in_superclass_use)
       << property->getDeclName() << Ivar->getDeclName()
       << ClassDeclared->getDeclName();
@@ -870,7 +870,7 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S,
       }
       // Issue diagnostics only if Ivar belongs to current class.
       if (Ivar && Ivar->getSynthesize() && 
-          IC->getClassInterface() == ClassDeclared) {
+          declaresSameEntity(IC->getClassInterface(), ClassDeclared)) {
         Diag(Ivar->getLocation(), diag::err_undeclared_var_use) 
         << PropertyId;
         Ivar->setInvalidDecl();
index 7ddb151e8a572aa73e9da66170ddfc49812457e2..d0d1484dd04dae9b6f93a74f4af0e3edbacfc004 100644 (file)
@@ -2300,7 +2300,8 @@ bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
                  ToType->getAs<ObjCObjectPointerType>()) {
         if (const ObjCObjectPointerType *PTFr =
               FromType->getAs<ObjCObjectPointerType>())
-          if (PTTo->getInterfaceDecl() == PTFr->getInterfaceDecl())
+          if (declaresSameEntity(PTTo->getInterfaceDecl(), 
+                                 PTFr->getInterfaceDecl()))
             continue;
       }
       if (ArgPos) *ArgPos = O - OldType->arg_type_begin();