From 383d29853331e4f6c0c720a1df9cab31f6ab3dba Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Sat, 29 Aug 2009 20:33:32 +0000 Subject: Patch to ir-gen user-defined conversions used in expressions [12.3.2-p3] git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80436 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CodeGenFunction.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'lib/CodeGen/CodeGenFunction.cpp') diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp index 68ab6dfc58..e3511edd2b 100644 --- a/lib/CodeGen/CodeGenFunction.cpp +++ b/lib/CodeGen/CodeGenFunction.cpp @@ -324,6 +324,17 @@ void CodeGenFunction::EmitBranchOnBoolExpr(const Expr *Cond, llvm::BasicBlock *FalseBlock) { if (const ParenExpr *PE = dyn_cast(Cond)) return EmitBranchOnBoolExpr(PE->getSubExpr(), TrueBlock, FalseBlock); + if (const CastExpr *E = dyn_cast(Cond)) + if (E->getCastKind() == CastExpr::CK_UserDefinedConversion) { + if (const CXXFunctionalCastExpr *CXXFExpr = + dyn_cast(E)) { + EmitCXXFunctionalCastExpr(CXXFExpr); + return; + } + else if (isa(E)) + return EmitBranchOnBoolExpr(E->getSubExpr(), TrueBlock, FalseBlock); + assert(false && "EmitBranchOnBoolExpr - Expected CStyleCastExpr"); + } if (const BinaryOperator *CondBOp = dyn_cast(Cond)) { // Handle X && Y in a condition. -- cgit v1.2.3-18-g5258