From: Chris Lattner Date: Sun, 2 Dec 2007 18:52:07 +0000 (+0000) Subject: fix logic for member expr codegen. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=12f65f6513afe10181aa68eb387ccac23e9e2b6e;p=clang fix logic for member expr codegen. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44520 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/CodeGen/CGExpr.cpp b/CodeGen/CGExpr.cpp index e7bd712f31..5d563e19b9 100644 --- a/CodeGen/CGExpr.cpp +++ b/CodeGen/CGExpr.cpp @@ -389,19 +389,15 @@ LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { Expr *BaseExpr = E->getBase(); llvm::Value *BaseValue = NULL; - if (BaseExpr->isLvalue() == Expr::LV_Valid) { + + // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. + if (E->isArrow()) + BaseValue = EmitScalarExpr(BaseExpr); + else { LValue BaseLV = EmitLValue(BaseExpr); + // FIXME: this isn't right for bitfields. BaseValue = BaseLV.getAddress(); - - if (E->isArrow()) { - QualType Ty = BaseExpr->getType(); - Ty = cast(Ty.getCanonicalType())->getPointeeType(); - BaseValue = - Builder.CreateBitCast(BaseValue, - llvm::PointerType::get(ConvertType(Ty)), "tmp"); - } - } else - BaseValue = EmitScalarExpr(BaseExpr); + } FieldDecl *Field = E->getMemberDecl(); unsigned idx = CGM.getTypes().getLLVMFieldNo(Field);