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/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp
index df869d9..b1643bb 100644
--- a/lib/Sema/SemaLookup.cpp
+++ b/lib/Sema/SemaLookup.cpp
@@ -311,6 +311,10 @@
 
 Sema::LookupResult
 Sema::LookupResult::CreateLookupResult(ASTContext &Context, NamedDecl *D) {
+  if (ObjCCompatibleAliasDecl *Alias 
+        = dyn_cast_or_null<ObjCCompatibleAliasDecl>(D))
+    D = Alias->getClassInterface();
+
   LookupResult Result;
   Result.StoredKind = (D && isa<OverloadedFunctionDecl>(D))?
     OverloadedDeclSingleDecl : SingleDecl;
@@ -338,9 +342,14 @@
       return Result;
     }
   } 
+
+  Decl *D = *F;
+  if (ObjCCompatibleAliasDecl *Alias 
+        = dyn_cast_or_null<ObjCCompatibleAliasDecl>(D))
+    D = Alias->getClassInterface();
     
   Result.StoredKind = SingleDecl;
-  Result.First = reinterpret_cast<uintptr_t>(*F);
+  Result.First = reinterpret_cast<uintptr_t>(D);
   Result.Last = 0;
   return Result;
 }
@@ -362,9 +371,14 @@
       return Result;
     }
   }
+
+  Decl *D = *F;
+  if (ObjCCompatibleAliasDecl *Alias 
+        = dyn_cast_or_null<ObjCCompatibleAliasDecl>(D))
+    D = Alias->getClassInterface();
   
   Result.StoredKind = SingleDecl;
-  Result.First = reinterpret_cast<uintptr_t>(*F);
+  Result.First = reinterpret_cast<uintptr_t>(D);
   Result.Last = 0;
   return Result;
 }
@@ -930,16 +944,6 @@
                                                 S, RedeclarationOnly, Loc));
       }
     }
-    if (getLangOptions().ObjC1 && II) {
-      // @interface and @compatibility_alias introduce typedef-like names.
-      // Unlike typedef's, they can only be introduced at file-scope (and are 
-      // therefore not scoped decls). They can, however, be shadowed by
-      // other names in IDNS_Ordinary.
-      ObjCAliasTy::iterator I = ObjCAliasDecls.find(II);
-      if (I != ObjCAliasDecls.end())
-        return LookupResult::CreateLookupResult(Context, 
-                                                I->second->getClassInterface());
-    }
   }
   return LookupResult::CreateLookupResult(Context, 0);
 }