diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/CodeGen/CGExprAgg.cpp | 4 | ||||
| -rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 6 | 
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExprAgg.cpp b/clang/lib/CodeGen/CGExprAgg.cpp index 8d903d9198f..4268ae3b170 100644 --- a/clang/lib/CodeGen/CGExprAgg.cpp +++ b/clang/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/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index faa4f7611d0..ed18d3247ac 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/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);  | 

