Change ObjCInterfaceDecl to inherit from NamedDecl (not TypeDecl). While ObjCInterfaceDecl is arguably a TypeDecl, it isn't a ScopedDecl. Since TypeDecl's are scoped, it makes sense to simply treat them as NamedDecl's. I could have fiddled a bit more with the hierarchy (in terms of creating a non-scoped TypeDecl), however this probably isn't worth the effort. 

I also finished unifying access to scope decl change by converting Sema::getObjCInterfaceDecl() to use Sema::LookupDecl(). This is much cleaner now:-)



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49107 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index e98d9b5..d2ad5c5 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -94,7 +94,14 @@
   /// with @protocol keyword, so that we can emit errors on duplicates and
   /// find the declarations when needed.
   llvm::DenseMap<IdentifierInfo*, ObjCProtocolDecl*> ObjCProtocols;
-  
+
+  /// ObjCInterfaceDecls - Keep track of all class declarations declared
+  /// with @interface, so that we can emit errors on duplicates and
+  /// find the declarations when needed. 
+  typedef llvm::DenseMap<const IdentifierInfo*, 
+                         ObjCInterfaceDecl*> ObjCInterfaceDeclsTy;
+  ObjCInterfaceDeclsTy ObjCInterfaceDecls;
+    
   /// ObjCAliasDecls - Keep track of all class declarations declared
   /// with @compatibility_alias, so that we can emit errors on duplicates and
   /// find the declarations when needed. This construct is ancient and will
@@ -102,7 +109,7 @@
   typedef llvm::DenseMap<const IdentifierInfo*, 
                          ObjCCompatibleAliasDecl*> ObjCAliasTy;
   ObjCAliasTy ObjCAliasDecls;
-  
+
   // Enum values used by KnownFunctionIDs (see below).
   enum {
     id_printf,