Make name lookup when we're inside a declarator's scope, such as ClassName::func, work with the new unqualified name lookup code. Test it with default arguments in out-of-line member definitions

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61060 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index bebd0cf..6ce3ec5 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -903,7 +903,7 @@
   /// CXXScopeSpec that was passed to ActOnCXXEnterDeclaratorScope as well.
   /// Used to indicate that names should revert to being looked up in the
   /// defining scope.
-  virtual void ActOnCXXExitDeclaratorScope(const CXXScopeSpec &SS);
+  virtual void ActOnCXXExitDeclaratorScope(Scope *S, const CXXScopeSpec &SS);
 
   // ParseObjCStringLiteral - Parse Objective-C string literals.
   virtual ExprResult ParseObjCStringLiteral(SourceLocation *AtLocs, 
diff --git a/lib/Sema/SemaCXXScopeSpec.cpp b/lib/Sema/SemaCXXScopeSpec.cpp
index 193e259..8b3218b 100644
--- a/lib/Sema/SemaCXXScopeSpec.cpp
+++ b/lib/Sema/SemaCXXScopeSpec.cpp
@@ -134,8 +134,8 @@
 void Sema::ActOnCXXEnterDeclaratorScope(Scope *S, const CXXScopeSpec &SS) {

   assert(SS.isSet() && "Parser passed invalid CXXScopeSpec.");

   assert(PreDeclaratorDC == 0 && "Previous declarator context not popped?");

-  PreDeclaratorDC = CurContext;

-  CurContext = static_cast<DeclContext*>(SS.getScopeRep());

+  PreDeclaratorDC = static_cast<DeclContext*>(S->getEntity());

+  S->setEntity(static_cast<DeclContext*>(SS.getScopeRep()));

 }

 

 /// ActOnCXXExitDeclaratorScope - Called when a declarator that previously

@@ -143,10 +143,9 @@
 /// CXXScopeSpec that was passed to ActOnCXXEnterDeclaratorScope as well.

 /// Used to indicate that names should revert to being looked up in the

 /// defining scope.

-void Sema::ActOnCXXExitDeclaratorScope(const CXXScopeSpec &SS) {

+void Sema::ActOnCXXExitDeclaratorScope(Scope *S, const CXXScopeSpec &SS) {

   assert(SS.isSet() && "Parser passed invalid CXXScopeSpec.");

-  assert(CurContext == static_cast<DeclContext*>(SS.getScopeRep()) &&

-         "Context imbalance!");

-  CurContext = PreDeclaratorDC;

+  assert(S->getEntity() == SS.getScopeRep() && "Context imbalance!");

+  S->setEntity(PreDeclaratorDC);

   PreDeclaratorDC = 0;

 }

diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 1be3071..5e0edcd 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -221,7 +221,7 @@
 Decl *Sema::LookupDecl(DeclarationName Name, unsigned NSI, Scope *S,
                        const DeclContext *LookupCtx,
                        bool enableLazyBuiltinCreation,
-                      bool LookInParent) {
+                       bool LookInParent) {
   if (!Name) return 0;
   unsigned NS = NSI;
   if (getLangOptions().CPlusPlus && (NS & Decl::IDNS_Ordinary))