diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2009-11-16 05:48:01 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2009-11-16 05:48:01 +0000 |
commit | eaae78a6fbd762c0ac6e75fa6fdfa4d167ceb4f2 (patch) | |
tree | 09aa46e995b3d9f7923bad2cd2f445e186812ef5 | |
parent | 05d9d7aa2d5dcb92ff434143803cdaf70a21c9f9 (diff) |
Some minor cleanup for EmitCastLValue.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@88894 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/CGExpr.cpp | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index bd1c12ccb3..27ea41d6e4 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -1298,14 +1298,8 @@ CodeGenFunction::EmitConditionalOperatorLValue(const ConditionalOperator* E) { LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { switch (E->getCastKind()) { default: - // If this is an lvalue cast, treat it as a no-op. - // FIXME: We shouldn't need to check for this explicitly! - if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) - if (ICE->isLvalueCast()) - return EmitLValue(E->getSubExpr()); - - assert(false && "Unhandled cast!"); - + return EmitUnsupportedLValue(E, "unexpected cast lvalue"); + case CastExpr::CK_NoOp: case CastExpr::CK_ConstructorConversion: case CastExpr::CK_UserDefinedConversion: @@ -1335,16 +1329,18 @@ LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { return LValue::MakeAddr(Temp, MakeQualifiers(E->getType())); } + case CastExpr::CK_BaseToDerived: { + return EmitUnsupportedLValue(E, "base-to-derived cast lvalue"); + } case CastExpr::CK_BitCast: { - // This must be a reinterpret_cast. - const CXXReinterpretCastExpr *CE = cast<CXXReinterpretCastExpr>(E); + // This must be a reinterpret_cast (or c-style equivalent). + const ExplicitCastExpr *CE = cast<ExplicitCastExpr>(E); LValue LV = EmitLValue(E->getSubExpr()); llvm::Value *V = Builder.CreateBitCast(LV.getAddress(), ConvertType(CE->getTypeAsWritten())); return LValue::MakeAddr(V, MakeQualifiers(E->getType())); } - } } |