diff --git a/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs b/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs index 5e00768a803..cbd1fce406f 100644 --- a/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs +++ b/compiler/noirc_evaluator/src/ssa/ir/instruction/binary.rs @@ -155,6 +155,11 @@ impl Binary { } } BinaryOp::Sub { .. } => { + if lhs == rhs { + let zero = dfg.make_constant(FieldElement::zero(), lhs_type); + return SimplifyResult::SimplifiedTo(zero); + } + if rhs_is_zero { return SimplifyResult::SimplifiedTo(lhs); } diff --git a/test_programs/noir_test_success/regression_4080/src/main.nr b/test_programs/noir_test_success/regression_4080/src/main.nr index 781d3e33ea3..01f358625be 100644 --- a/test_programs/noir_test_success/regression_4080/src/main.nr +++ b/test_programs/noir_test_success/regression_4080/src/main.nr @@ -3,6 +3,6 @@ #[test(should_fail_with = "attempt to add with overflow")] fn main() { - let var1: u8 = ((255 + 1) ^ (255 + 1)) - ((255 + 1) - (255 + 1)); - assert_eq(var1, 0); + let var1: u8 = ((255 + 1) ^ (255 + 1) ^ (255 + 1)); + assert_eq(var1 as Field, 256); }