fix for script optimization of "opaque" values that are run-time constants

This commit is contained in:
Vern Paxson 2024-08-09 09:26:52 -07:00 committed by Arne Welzel
parent 3f52cbcbc7
commit 6faad5e5ca

View file

@ -475,7 +475,8 @@ ExprPtr UnaryExpr::Reduce(Reducer* c, StmtPtr& red_stmt) {
auto op_val = op->FoldVal(); auto op_val = op->FoldVal();
if ( op_val ) { if ( op_val ) {
auto fold = Fold(op_val.get()); auto fold = Fold(op_val.get());
return TransformMe(make_intrusive<ConstExpr>(fold), c, red_stmt); if ( fold->GetType()->Tag() != TYPE_OPAQUE )
return TransformMe(make_intrusive<ConstExpr>(fold), c, red_stmt);
} }
if ( c->Optimizing() ) if ( c->Optimizing() )
@ -523,7 +524,8 @@ ExprPtr BinaryExpr::Reduce(Reducer* c, StmtPtr& red_stmt) {
auto op2_fold_val = op2->FoldVal(); auto op2_fold_val = op2->FoldVal();
if ( op1_fold_val && op2_fold_val ) { if ( op1_fold_val && op2_fold_val ) {
auto fold = Fold(op1_fold_val.get(), op2_fold_val.get()); auto fold = Fold(op1_fold_val.get(), op2_fold_val.get());
return TransformMe(make_intrusive<ConstExpr>(fold), c, red_stmt); if ( fold->GetType()->Tag() != TYPE_OPAQUE )
return TransformMe(make_intrusive<ConstExpr>(fold), c, red_stmt);
} }
if ( c->Optimizing() ) if ( c->Optimizing() )