Support nested-name-specifiers for C++ member access expressions, e.g.,

  this->Base::foo

from James Porter!


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78278 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplateInstantiateExpr.cpp b/lib/Sema/SemaTemplateInstantiateExpr.cpp
index 3169998..2e7ed1a 100644
--- a/lib/Sema/SemaTemplateInstantiateExpr.cpp
+++ b/lib/Sema/SemaTemplateInstantiateExpr.cpp
@@ -1270,14 +1270,18 @@
   if (Base.isInvalid())
     return SemaRef.ExprError();
 
+  tok::TokenKind OpKind = E->isArrow() ? tok::arrow : tok::period;
+  CXXScopeSpec SS;
+  Base = SemaRef.ActOnCXXEnterMemberScope(0, SS, move(Base), OpKind);
   // FIXME: Instantiate the declaration name.
-  return SemaRef.ActOnMemberReferenceExpr(/*Scope=*/0,
+  Base = SemaRef.ActOnMemberReferenceExpr(/*Scope=*/0,
                                           move(Base), E->getOperatorLoc(),
-                                          E->isArrow()? tok::arrow 
-                                                      : tok::period,
+                                          OpKind,
                                           E->getMemberLoc(),
                               /*FIXME:*/*E->getMember().getAsIdentifierInfo(),
-                                   /*FIXME?*/Sema::DeclPtrTy::make((Decl*)0));
+                              /*FIXME?*/Sema::DeclPtrTy::make((Decl*)0));
+  SemaRef.ActOnCXXExitMemberScope(0, SS);
+  return move(Base);
 }
 
 //----------------------------------------------------------------------------