diff options
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGCXX.cpp | 22 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGExpr.cpp | 14 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGExprAgg.cpp | 13 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 8 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 11 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.h | 2 |
6 files changed, 6 insertions, 64 deletions
diff --git a/clang/lib/CodeGen/CGCXX.cpp b/clang/lib/CodeGen/CGCXX.cpp index e311912d95f..9963a9b048b 100644 --- a/clang/lib/CodeGen/CGCXX.cpp +++ b/clang/lib/CodeGen/CGCXX.cpp @@ -264,28 +264,6 @@ CodeGenFunction::EmitCXXOperatorMemberCallExpr(const CXXOperatorCallExpr *E, E->arg_begin() + 1, E->arg_end()); } -RValue -CodeGenFunction::EmitCXXFunctionalCastExpr(const CXXFunctionalCastExpr *E) { - assert((E->getCastKind() == CastExpr::CK_UserDefinedConversion) && - "EmitCXXFunctionalCastExpr - called with wrong cast"); - - CXXMethodDecl *MD = E->getTypeConversionMethod(); - assert(MD && "EmitCXXFunctionalCastExpr - null conversion method"); - assert(isa<CXXConversionDecl>(MD) && "EmitCXXFunctionalCastExpr - not" - " method decl"); - const FunctionProtoType *FPT = MD->getType()->getAsFunctionProtoType(); - - const llvm::Type *Ty = - CGM.getTypes().GetFunctionType(CGM.getTypes().getFunctionInfo(MD), - FPT->isVariadic()); - llvm::Constant *Callee = CGM.GetAddrOfFunction(GlobalDecl(MD), Ty); - llvm::Value *This = EmitLValue(E->getSubExpr()).getAddress(); - RValue RV = EmitCXXMemberCall(MD, Callee, This, 0, 0); - if (RV.isAggregate()) - RV = RValue::get(RV.getAggregateAddr()); - return RV; -} - llvm::Value *CodeGenFunction::LoadCXXThis() { assert(isa<CXXMethodDecl>(CurFuncDecl) && "Must be in a C++ member function decl to load 'this'"); diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index 969b789d517..dde6899c29b 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -1158,19 +1158,11 @@ LValue CodeGenFunction::EmitConditionalOperator(const ConditionalOperator* E) { /// all the reasons that casts are permitted with aggregate result, including /// noop aggregate casts, and cast from scalar to union. LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { - if (E->getCastKind() == CastExpr::CK_UserDefinedConversion) { - if (const CXXFunctionalCastExpr *CXXFExpr = - dyn_cast<CXXFunctionalCastExpr>(E)) - return LValue::MakeAddr( - EmitCXXFunctionalCastExpr(CXXFExpr).getScalarVal(), 0); - assert(isa<CStyleCastExpr>(E) && - "EmitCastLValue - Expected CStyleCastExpr"); - return EmitLValue(E->getSubExpr()); - } - // If this is an aggregate-to-aggregate cast, just use the input's address as // the lvalue. - if (E->getCastKind() == CastExpr::CK_NoOp) + if (E->getCastKind() == CastExpr::CK_NoOp || + E->getCastKind() == CastExpr::CK_ConstructorConversion || + E->getCastKind() == CastExpr::CK_UserDefinedConversion) return EmitLValue(E->getSubExpr()); // If this is an lvalue cast, treat it as a no-op. diff --git a/clang/lib/CodeGen/CGExprAgg.cpp b/clang/lib/CodeGen/CGExprAgg.cpp index 8bda0f3e36e..2e7e8686169 100644 --- a/clang/lib/CodeGen/CGExprAgg.cpp +++ b/clang/lib/CodeGen/CGExprAgg.cpp @@ -184,19 +184,12 @@ void AggExprEmitter::VisitCastExpr(CastExpr *E) { LValue::MakeAddr(CastPtr, 0)); return; } - if (E->getCastKind() == CastExpr::CK_UserDefinedConversion) { - if (const CXXFunctionalCastExpr *CXXFExpr = - dyn_cast<CXXFunctionalCastExpr>(E)) - CGF.EmitCXXFunctionalCastExpr(CXXFExpr); - else - if (isa<CStyleCastExpr>(E)) - Visit(E->getSubExpr()); - return; - } // FIXME: Remove the CK_Unknown check here. assert((E->getCastKind() == CastExpr::CK_NoOp || - E->getCastKind() == CastExpr::CK_Unknown) && + E->getCastKind() == CastExpr::CK_Unknown || + E->getCastKind() == CastExpr::CK_UserDefinedConversion || + E->getCastKind() == CastExpr::CK_ConstructorConversion) && "Only no-op casts allowed!"); assert(CGF.getContext().hasSameUnqualifiedType(E->getSubExpr()->getType(), E->getType()) && diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index b4ce838af35..aecf9558636 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -227,14 +227,6 @@ public: return llvm::Constant::getNullValue(ConvertType(E->getType())); } Value *VisitCastExpr(const CastExpr *E) { - if (E->getCastKind() == CastExpr::CK_UserDefinedConversion) { - if (const CXXFunctionalCastExpr *CXXFExpr = - dyn_cast<CXXFunctionalCastExpr>(E)) - return CGF.EmitCXXFunctionalCastExpr(CXXFExpr).getScalarVal(); - assert(isa<CStyleCastExpr>(E) && - "VisitCastExpr - missing CStyleCastExpr"); - } - // Make sure to evaluate VLA bounds now so that we have them for later. if (E->getType()->isVariablyModifiedType()) CGF.EmitVLASize(E->getType()); diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index be2406d063b..05f94371cb2 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -324,17 +324,6 @@ void CodeGenFunction::EmitBranchOnBoolExpr(const Expr *Cond, llvm::BasicBlock *FalseBlock) { if (const ParenExpr *PE = dyn_cast<ParenExpr>(Cond)) return EmitBranchOnBoolExpr(PE->getSubExpr(), TrueBlock, FalseBlock); - if (const CastExpr *E = dyn_cast<CastExpr>(Cond)) - if (E->getCastKind() == CastExpr::CK_UserDefinedConversion) { - if (const CXXFunctionalCastExpr *CXXFExpr = - dyn_cast<CXXFunctionalCastExpr>(E)) { - EmitCXXFunctionalCastExpr(CXXFExpr); - return; - } - else if (isa<CStyleCastExpr>(E)) - return EmitBranchOnBoolExpr(E->getSubExpr(), TrueBlock, FalseBlock); - assert(false && "EmitBranchOnBoolExpr - Expected CStyleCastExpr"); - } if (const BinaryOperator *CondBOp = dyn_cast<BinaryOperator>(Cond)) { // Handle X && Y in a condition. diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index 0fac947efe1..07804a93963 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/lib/CodeGen/CodeGenFunction.h @@ -841,8 +841,6 @@ public: RValue EmitCXXOperatorMemberCallExpr(const CXXOperatorCallExpr *E, const CXXMethodDecl *MD); - RValue EmitCXXFunctionalCastExpr(const CXXFunctionalCastExpr *E); - RValue EmitBuiltinExpr(const FunctionDecl *FD, unsigned BuiltinID, const CallExpr *E); |