Make sure that we look into nested, transparent declaration contexts
when looking for a name within a given DeclContext. Now enumerators
will show up in code-completion results.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86591 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp
index c632395..072dfe9 100644
--- a/lib/Sema/SemaCodeComplete.cpp
+++ b/lib/Sema/SemaCodeComplete.cpp
@@ -473,17 +473,24 @@
   for (DeclContext *CurCtx = Ctx->getPrimaryContext(); CurCtx; 
        CurCtx = CurCtx->getNextContext()) {
     for (DeclContext::decl_iterator D = CurCtx->decls_begin(), 
-         DEnd = CurCtx->decls_end();
+                                 DEnd = CurCtx->decls_end();
          D != DEnd; ++D) {
       if (NamedDecl *ND = dyn_cast<NamedDecl>(*D))
         Results.MaybeAddResult(Result(ND, Rank, 0, InBaseClass), CurContext);
+      
+      // Visit transparent contexts inside this context.
+      if (DeclContext *InnerCtx = dyn_cast<DeclContext>(*D)) {
+        if (InnerCtx->isTransparentContext())
+          CollectMemberLookupResults(InnerCtx, Rank, CurContext, Visited,
+                                     Results, InBaseClass);
+      }
     }
   }
   
   // Traverse the contexts of inherited classes.
   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Ctx)) {
     for (CXXRecordDecl::base_class_iterator B = Record->bases_begin(),
-         BEnd = Record->bases_end();
+                                         BEnd = Record->bases_end();
          B != BEnd; ++B) {
       QualType BaseType = B->getType();