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

llvm-svn: 58000
This commit is contained in:
Argyrios Kyrtzidis 2008-10-22 21:00:29 +00:00
parent 9a96bf22ec
commit 2147e7d88b
2 changed files with 2 additions and 5 deletions

View File

@ -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)));

View File

@ -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());