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/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;

 }