diff options
Diffstat (limited to 'lib/CodeGen/CodeGenFunction.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenFunction.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
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<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. |