diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-07-15 18:41:54 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-07-15 18:41:54 +0000 |
commit | 928d69f2927c32e2f57a882a96c2bef1de79aa4b (patch) | |
tree | d9187ffdd3c518ab807e6fe2895b48c29223e596 /lib/CodeGen/CGExpr.cpp | |
parent | f801dcff43b49509bf758e213de56288bd3e2a2e (diff) |
Revert r108431 and r108433 (the cast-to-const-reference fixes), which
broke nightlytest.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108439 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGExpr.cpp')
-rw-r--r-- | lib/CodeGen/CGExpr.cpp | 54 |
1 files changed, 12 insertions, 42 deletions
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index db4d23187d..43bab9fece 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -1749,47 +1749,8 @@ CodeGenFunction::EmitConditionalOperatorLValue(const ConditionalOperator* E) { /// cast from scalar to union. LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { switch (E->getCastKind()) { - case CastExpr::CK_ToVoid: + default: return EmitUnsupportedLValue(E, "unexpected cast lvalue"); - - case CastExpr::CK_NoOp: - if (!E->getSubExpr()->Classify(getContext()).isPRValue()) { - LValue LV = EmitLValue(E->getSubExpr()); - if (LV.isPropertyRef()) { - QualType QT = E->getSubExpr()->getType(); - RValue RV = EmitLoadOfPropertyRefLValue(LV, QT); - assert(!RV.isScalar() && "EmitCastLValue - scalar cast of property ref"); - llvm::Value *V = RV.getAggregateAddr(); - return LValue::MakeAddr(V, MakeQualifiers(QT)); - } - return LV; - } - // Fall through to synthesize a temporary. - - case CastExpr::CK_Unknown: - case CastExpr::CK_BitCast: - case CastExpr::CK_ArrayToPointerDecay: - case CastExpr::CK_FunctionToPointerDecay: - case CastExpr::CK_NullToMemberPointer: - case CastExpr::CK_IntegralToPointer: - case CastExpr::CK_PointerToIntegral: - case CastExpr::CK_VectorSplat: - case CastExpr::CK_IntegralCast: - case CastExpr::CK_IntegralToFloating: - case CastExpr::CK_FloatingToIntegral: - case CastExpr::CK_FloatingCast: - case CastExpr::CK_DerivedToBaseMemberPointer: - case CastExpr::CK_BaseToDerivedMemberPointer: - case CastExpr::CK_MemberPointerToBoolean: - case CastExpr::CK_AnyPointerToBlockPointerCast: { - // These casts only produce lvalues when we're binding a reference to a - // temporary realized from a (converted) pure rvalue. Emit the expression - // as a value, copy it into a temporary, and return an lvalue referring to - // that temporary. - llvm::Value *V = CreateMemTemp(E->getType(), "ref.temp"); - EmitAnyExprToMem(E, V, false, false); - return LValue::MakeAddr(V, MakeQualifiers(E->getType())); - } case CastExpr::CK_Dynamic: { LValue LV = EmitLValue(E->getSubExpr()); @@ -1799,6 +1760,17 @@ LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { MakeQualifiers(E->getType())); } + case CastExpr::CK_NoOp: { + LValue LV = EmitLValue(E->getSubExpr()); + if (LV.isPropertyRef()) { + QualType QT = E->getSubExpr()->getType(); + RValue RV = EmitLoadOfPropertyRefLValue(LV, QT); + assert(!RV.isScalar() && "EmitCastLValue - scalar cast of property ref"); + llvm::Value *V = RV.getAggregateAddr(); + return LValue::MakeAddr(V, MakeQualifiers(QT)); + } + return LV; + } case CastExpr::CK_ConstructorConversion: case CastExpr::CK_UserDefinedConversion: case CastExpr::CK_AnyPointerToObjCPointerCast: @@ -1854,8 +1826,6 @@ LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { return LValue::MakeAddr(V, MakeQualifiers(E->getType())); } } - - llvm_unreachable("Unhandled lvalue cast kind?"); } LValue CodeGenFunction::EmitNullInitializationLValue( |