Eliminate Sema::ObjCAliasDecls. This is based on Steve's fix, but also
updates name lookup so that we see through @compatibility_alias
declarations to their underlying interfaces.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69950 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index e81e883..63b0062 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -299,6 +299,18 @@
       S->RemoveDecl(DeclPtrTy::make(*Redecl));
       IdResolver.RemoveDecl(*Redecl);
     }
+  } else if (isa<ObjCInterfaceDecl>(D)) {
+    // We're pushing an Objective-C interface into the current
+    // context. If there is already an alias declaration, remove it first.
+    for (IdentifierResolver::iterator 
+           I = IdResolver.begin(D->getDeclName()), IEnd = IdResolver.end();
+         I != IEnd; ++I) {
+      if (isa<ObjCCompatibleAliasDecl>(*I)) {
+        S->RemoveDecl(DeclPtrTy::make(*I));
+        IdResolver.RemoveDecl(*I);
+        break;
+      }
+    }
   }
 
   IdResolver.AddDecl(D);