From 06ffd97749c9f68e63ac3dc43e019e61cd8f6b4e Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Tue, 14 Dec 2021 15:36:03 -0800 Subject: [PATCH] fixes for double-delete and reducing '?' operator with constant alternatives --- src/script_opt/Expr.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/script_opt/Expr.cc b/src/script_opt/Expr.cc index 75e7fb74e7..b69ee6d30d 100644 --- a/src/script_opt/Expr.cc +++ b/src/script_opt/Expr.cc @@ -1407,6 +1407,8 @@ ExprPtr CondExpr::Reduce(Reducer* c, StmtPtr& red_stmt) auto op2_t = op2->IsOne(); ASSERT(op2_t != op3->IsOne()); + red_stmt = MergeStmts(op1_red_stmt, red_stmt); + if ( op2_t ) // This is "var ? T : F", which can be replaced by var. return op1; @@ -1821,7 +1823,7 @@ ExprPtr FieldExpr::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()