fixes for double-delete and reducing '?' operator with constant alternatives

This commit is contained in:
Vern Paxson 2021-12-14 15:36:03 -08:00
parent 77f6a658e6
commit 06ffd97749

View file

@ -1407,6 +1407,8 @@ ExprPtr CondExpr::Reduce(Reducer* c, StmtPtr& red_stmt)
auto op2_t = op2->IsOne(); auto op2_t = op2->IsOne();
ASSERT(op2_t != op3->IsOne()); ASSERT(op2_t != op3->IsOne());
red_stmt = MergeStmts(op1_red_stmt, red_stmt);
if ( op2_t ) if ( op2_t )
// This is "var ? T : F", which can be replaced by var. // This is "var ? T : F", which can be replaced by var.
return op1; return op1;
@ -1821,7 +1823,7 @@ ExprPtr FieldExpr::Duplicate()
ExprPtr HasFieldExpr::Duplicate() ExprPtr HasFieldExpr::Duplicate()
{ {
return SetSucc(new HasFieldExpr(op->Duplicate(), field_name)); return SetSucc(new HasFieldExpr(op->Duplicate(), util::copy_string(field_name)));
} }
ExprPtr RecordConstructorExpr::Duplicate() ExprPtr RecordConstructorExpr::Duplicate()