Now that DeclRefExpr accepts a NamedDecl, use a DeclRefExpr for when a CXXFieldDecl is referenced inside a method.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58000 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Argyrios Kyrtzidis 2008-10-22 21:00:29 +00:00
Родитель 64e859a366
Коммит 90b7bc6751
2 изменённых файлов: 2 добавлений и 5 удалений

Просмотреть файл

@ -325,7 +325,7 @@ bool Expr::hasLocalSideEffect() const {
/// DeclCanBeLvalue - Determine whether the given declaration can be
/// an lvalue. This is a helper routine for isLvalue.
static bool DeclCanBeLvalue(const NamedDecl *Decl, ASTContext &Ctx) {
return isa<VarDecl>(Decl) ||
return isa<VarDecl>(Decl) || isa<CXXFieldDecl>(Decl) ||
// C++ 3.10p2: An lvalue refers to an object or function.
(Ctx.getLangOptions().CPlusPlus &&
(isa<FunctionDecl>(Decl) || isa<OverloadedFunctionDecl>(Decl)));

Просмотреть файл

@ -402,10 +402,7 @@ Sema::ExprResult Sema::ActOnIdentifierExpr(Scope *S, SourceLocation Loc,
if (FD->isInvalidDecl())
return true;
// FIXME: Use DeclRefExpr or a new Expr for a direct CXXField reference.
ExprResult ThisExpr = ActOnCXXThis(SourceLocation());
return new MemberExpr(static_cast<Expr*>(ThisExpr.Val),
true, FD, Loc, FD->getType());
return new DeclRefExpr(FD, FD->getType(), Loc);
}
return Diag(Loc, diag::err_invalid_non_static_member_use, FD->getName());