diff options
author | Anders Carlsson <andersca@mac.com> | 2009-06-04 03:00:32 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-06-04 03:00:32 +0000 |
commit | fb6fa30a9b06670deb14f862dddbc49a12552939 (patch) | |
tree | 1a3f382c061b996fa5045a4180a798210bd57167 | |
parent | 33da07db112f4877f6ab13e20db08b9bb86a0c2e (diff) |
Use PushConditionalTempDestruction/PopConditionalTempDestruction for the ternary operator.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72842 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/CGExprAgg.cpp | 4 | ||||
-rw-r--r-- | lib/CodeGen/CGExprScalar.cpp | 6 |
2 files changed, 9 insertions, 1 deletions
diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp index 8d903d9198..4268ae3b17 100644 --- a/lib/CodeGen/CGExprAgg.cpp +++ b/lib/CodeGen/CGExprAgg.cpp @@ -263,17 +263,21 @@ void AggExprEmitter::VisitConditionalOperator(const ConditionalOperator *E) { llvm::Value *Cond = CGF.EvaluateExprAsBool(E->getCond()); Builder.CreateCondBr(Cond, LHSBlock, RHSBlock); + CGF.PushConditionalTempDestruction(); CGF.EmitBlock(LHSBlock); // Handle the GNU extension for missing LHS. assert(E->getLHS() && "Must have LHS for aggregate value"); Visit(E->getLHS()); + CGF.PopConditionalTempDestruction(); CGF.EmitBranch(ContBlock); + CGF.PushConditionalTempDestruction(); CGF.EmitBlock(RHSBlock); Visit(E->getRHS()); + CGF.PopConditionalTempDestruction(); CGF.EmitBranch(ContBlock); CGF.EmitBlock(ContBlock); diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index faa4f7611d..ed18d3247a 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -1452,7 +1452,8 @@ VisitConditionalOperator(const ConditionalOperator *E) { CGF.getContext().BoolTy); Builder.CreateCondBr(CondBoolVal, LHSBlock, RHSBlock); } - + + CGF.PushConditionalTempDestruction(); CGF.EmitBlock(LHSBlock); // Handle the GNU extension for missing LHS. @@ -1462,12 +1463,15 @@ VisitConditionalOperator(const ConditionalOperator *E) { else // Perform promotions, to handle cases like "short ?: int" LHS = EmitScalarConversion(CondVal, E->getCond()->getType(), E->getType()); + CGF.PopConditionalTempDestruction(); LHSBlock = Builder.GetInsertBlock(); CGF.EmitBranch(ContBlock); + CGF.PushConditionalTempDestruction(); CGF.EmitBlock(RHSBlock); Value *RHS = Visit(E->getRHS()); + CGF.PopConditionalTempDestruction(); RHSBlock = Builder.GetInsertBlock(); CGF.EmitBranch(ContBlock); |