diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-08-06 03:17:00 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-08-06 03:17:00 +0000 |
commit | fe85cedd58df7daed29201703cfb8806e12876d0 (patch) | |
tree | 3839a33ad270a9f4ed978e24e87a93d3ad409fdd /lib/Sema/SemaTemplateInstantiateExpr.cpp | |
parent | 4403a5e1f956fa86d515492dbe7c7a2817d8780d (diff) |
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
Diffstat (limited to 'lib/Sema/SemaTemplateInstantiateExpr.cpp')
-rw-r--r-- | lib/Sema/SemaTemplateInstantiateExpr.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/Sema/SemaTemplateInstantiateExpr.cpp b/lib/Sema/SemaTemplateInstantiateExpr.cpp index 3169998fb3..2e7ed1a632 100644 --- a/lib/Sema/SemaTemplateInstantiateExpr.cpp +++ b/lib/Sema/SemaTemplateInstantiateExpr.cpp @@ -1270,14 +1270,18 @@ TemplateExprInstantiator::VisitCXXUnresolvedMemberExpr( 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); } //---------------------------------------------------------------------------- |