diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-08-29 20:33:32 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-08-29 20:33:32 +0000 |
commit | 383d29853331e4f6c0c720a1df9cab31f6ab3dba (patch) | |
tree | 98739b6301d7e7a6d90bcf90af00c091012e29fa /lib/CodeGen | |
parent | 595adc1795cc2c079ef5876100e01acd10a0504a (diff) |
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
Diffstat (limited to 'lib/CodeGen')
-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. |