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