Fixed a bug whereby, struct tag name matches a typedef/objc-class name
and hid them.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42915 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp
index 0a63cb9..7e0a51f 100644
--- a/Sema/SemaDecl.cpp
+++ b/Sema/SemaDecl.cpp
@@ -28,12 +28,17 @@
 using namespace clang;
 
 Sema::DeclTy *Sema::isTypeName(const IdentifierInfo &II, Scope *S) const {
-  if (Decl *IIDecl = II.getFETokenInfo<Decl>())
-    if (isa<TypedefDecl>(IIDecl) || isa<ObjcInterfaceDecl>(IIDecl))
-      return IIDecl;
-    else if (ObjcCompatibleAliasDecl *ADecl = 
-               dyn_cast<ObjcCompatibleAliasDecl>(IIDecl))
-      return ADecl->getClassInterface();
+  Decl *IIDecl = II.getFETokenInfo<Decl>();
+  // Find first occurance of none-tagged declaration
+  while(IIDecl && IIDecl->getIdentifierNamespace() != Decl::IDNS_Ordinary)
+    IIDecl = cast<ScopedDecl>(IIDecl)->getNext();
+  if (!IIDecl)
+    return 0;
+  if (isa<TypedefDecl>(IIDecl) || isa<ObjcInterfaceDecl>(IIDecl))
+    return IIDecl;
+  if (ObjcCompatibleAliasDecl *ADecl = 
+      dyn_cast<ObjcCompatibleAliasDecl>(IIDecl))
+    return ADecl->getClassInterface(); 
   return 0;
 }