Skip to content

fix(fuzz): Consider == turning into != equivalent#9025

Merged
aakoshh merged 3 commits intomasterfrom
af/fix-fuzz-interpret-compare-error
Jun 26, 2025
Merged

fix(fuzz): Consider == turning into != equivalent#9025
aakoshh merged 3 commits intomasterfrom
af/fix-fuzz-interpret-compare-error

Conversation

@aakoshh
Copy link
Copy Markdown
Contributor

@aakoshh aakoshh commented Jun 26, 2025

Description

Problem*

Fixes a fuzzing error in https://github.com/noir-lang/noir/actions/runs/15892240538/job/44816776896

Summary*

Changes the Comparable implementation for the SSA interpreter errors to consider ConstrainEqFailed and ConstrainNeFailed equivalents, as long as the message is the same.

Additional Context

NOIR_AST_FUZZER_SEED=0x0ce7cc0200100000 cargo test -p noir_ast_fuzzer_fuzz pass_vs_prev

Some SSA pass turned a constrain false == true into a constrain 0 != 0.

Documentation*

Check one:

  • No documentation needed.
  • Documentation included in this PR.
  • [For Experimental Features] Documentation to be submitted in a separate PR.

PR Checklist*

  • I have tested the changes locally.
  • I have formatted the changes with Prettier and/or cargo fmt on default settings.

@aakoshh aakoshh requested review from a team and rkarabut June 26, 2025 09:01
Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'Compilation Time'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: b8173d0 Previous: b2c38af Ratio
rollup-merge 1.498 s 1.24 s 1.21

This comment was automatically generated by workflow using github-action-benchmark.

CC: @TomAFrench

Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'Test Suite Duration'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: b8173d0 Previous: 3838c69 Ratio
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_blob 179 s 141 s 1.27

This comment was automatically generated by workflow using github-action-benchmark.

CC: @TomAFrench

Copy link
Copy Markdown
Member

@TomAFrench TomAFrench left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM but we can simplify the match seeing as we're just checking the assert message

@aakoshh aakoshh enabled auto-merge June 26, 2025 10:08
@aakoshh aakoshh added this pull request to the merge queue Jun 26, 2025
Merged via the queue into master with commit a77d56d Jun 26, 2025
118 checks passed
@aakoshh aakoshh deleted the af/fix-fuzz-interpret-compare-error branch June 26, 2025 10:52
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Jul 1, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
fix: check both coordinates for point doubling
(noir-lang/noir#9039)
fix: codegen generic type arguments
(noir-lang/noir#9044)
chore: remove accidentally committed files
(noir-lang/noir#9048)
fix(fuzz): enable print in comptime_vs_brillig_direct
(noir-lang/noir#9045)
chore: move a couple of test_utils functions into a module
(noir-lang/noir#9052)
chore: bump external pinned commits
(noir-lang/noir#9046)
fix: put constraint failure after binary operations that overflow
(noir-lang/noir#9023)
fix(ssa): Remove array from cache in constant folding if it's an
argument to a `Call` (noir-lang/noir#9040)
feat: some `nargo expand` fixes related to function and method calls
(noir-lang/noir#9038)
feat(ssa_fuzzer): custom mutations
(noir-lang/noir#8988)
feat: implicit coercion of str and fmtstr into CtString
(noir-lang/noir#9032)
chore: add idempotency check to `remove_unreachable_functions`
(noir-lang/noir#9017)
chore: add logging for signature failure cases which break barretenberg
(noir-lang/noir#9030)
feat(ssa): Handle `println` in the SSA interpreter
(noir-lang/noir#9028)
chore: don't compute used globals during DIE
(noir-lang/noir#9029)
fix(ssa_fuzzer): nested conditions in loops
(noir-lang/noir#8997)
fix(fuzz): Consider `==` turning into `!=` equivalent
(noir-lang/noir#9025)
fix(fuzz): Avoid overflow in `gen_unary`
(noir-lang/noir#9024)
fix(ssa): Perform `mem2reg` before DIE
(noir-lang/noir#9018)
fix: Strange use of predicates in euclidian division
(noir-lang/noir#8934)
fix: compute the dominance frontier of the reverse cfg using the
extended cfg (noir-lang/noir#9019)
fix(fuzz): Handle overflow errors from the elaborator
(noir-lang/noir#9014)
feat: show why an assertion will always fail if it's a static string
(noir-lang/noir#9013)
chore(ssa): Add `SsaPass:and_then`
(noir-lang/noir#9016)
fix: Add a remove_unreachable_instructions SSA pass (with unreachable
terminator) (noir-lang/noir#9008)
feat: `nargo expand` for LSP
(noir-lang/noir#9012)
fix(mem2reg): Add the value in `ArraySet` to `aliased_references`
(noir-lang/noir#8976)
feat(debug): Print ssa locations along with ssa
(noir-lang/noir#9001)
chore: move `nargo expand` code to its own crate
(noir-lang/noir#9011)
chore: redo typo PR by donatik27
(noir-lang/noir#9004)
fix: recover generics when defining trait impl function
(noir-lang/noir#9009)
fix: replace public key with curve generators in inactive branches
(noir-lang/noir#8993)
fix(fuzz): Avoid overflowing binary ops in "no dynamic" mode
(noir-lang/noir#8996)
END_COMMIT_OVERRIDE

---------

Co-authored-by: AztecBot <tech@aztecprotocol.com>
Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
Co-authored-by: Ary Borenszweig <asterite@gmail.com>
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Jul 2, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(docs): Brillig VM docs
(noir-lang/noir#9078)
fix(expand): missing struct member visibility, and use "crate" instead
of "super" when possible (noir-lang/noir#9081)
fix: revert #9044 (noir-lang/noir#9080)
chore: error on infinite recursion
(noir-lang/noir#9063)
fix(fuzz): Assign to an index variable to sequence side effects
(noir-lang/noir#9056)
chore: bump cargo deny (noir-lang/noir#9077)
chore: Refactor `ConstrainEqFailed` to have `Option<String>` for `msg`
(noir-lang/noir#9065)
chore(debug): Toggle SSA locations when printing SSA
(noir-lang/noir#9066)
chore(acir_gen): Improve error message for radix decomposition
(noir-lang/noir#9068)
chore(ci): fix upload of benchmark results on master
(noir-lang/noir#9069)
fix: check both coordinates for point doubling
(noir-lang/noir#9039)
fix: codegen generic type arguments
(noir-lang/noir#9044)
chore: remove accidentally committed files
(noir-lang/noir#9048)
fix(fuzz): enable print in comptime_vs_brillig_direct
(noir-lang/noir#9045)
chore: move a couple of test_utils functions into a module
(noir-lang/noir#9052)
chore: bump external pinned commits
(noir-lang/noir#9046)
fix: put constraint failure after binary operations that overflow
(noir-lang/noir#9023)
fix(ssa): Remove array from cache in constant folding if it's an
argument to a `Call` (noir-lang/noir#9040)
feat: some `nargo expand` fixes related to function and method calls
(noir-lang/noir#9038)
feat(ssa_fuzzer): custom mutations
(noir-lang/noir#8988)
feat: implicit coercion of str and fmtstr into CtString
(noir-lang/noir#9032)
chore: add idempotency check to `remove_unreachable_functions`
(noir-lang/noir#9017)
chore: add logging for signature failure cases which break barretenberg
(noir-lang/noir#9030)
feat(ssa): Handle `println` in the SSA interpreter
(noir-lang/noir#9028)
chore: don't compute used globals during DIE
(noir-lang/noir#9029)
fix(ssa_fuzzer): nested conditions in loops
(noir-lang/noir#8997)
fix(fuzz): Consider `==` turning into `!=` equivalent
(noir-lang/noir#9025)
fix(fuzz): Avoid overflow in `gen_unary`
(noir-lang/noir#9024)
fix(ssa): Perform `mem2reg` before DIE
(noir-lang/noir#9018)
fix: Strange use of predicates in euclidian division
(noir-lang/noir#8934)
fix: compute the dominance frontier of the reverse cfg using the
extended cfg (noir-lang/noir#9019)
fix(fuzz): Handle overflow errors from the elaborator
(noir-lang/noir#9014)
feat: show why an assertion will always fail if it's a static string
(noir-lang/noir#9013)
chore(ssa): Add `SsaPass:and_then`
(noir-lang/noir#9016)
fix: Add a remove_unreachable_instructions SSA pass (with unreachable
terminator) (noir-lang/noir#9008)
feat: `nargo expand` for LSP
(noir-lang/noir#9012)
fix(mem2reg): Add the value in `ArraySet` to `aliased_references`
(noir-lang/noir#8976)
feat(debug): Print ssa locations along with ssa
(noir-lang/noir#9001)
chore: move `nargo expand` code to its own crate
(noir-lang/noir#9011)
chore: redo typo PR by donatik27
(noir-lang/noir#9004)
fix: recover generics when defining trait impl function
(noir-lang/noir#9009)
fix: replace public key with curve generators in inactive branches
(noir-lang/noir#8993)
fix(fuzz): Avoid overflowing binary ops in "no dynamic" mode
(noir-lang/noir#8996)
END_COMMIT_OVERRIDE

---------

Co-authored-by: AztecBot <tech@aztecprotocol.com>
Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
Co-authored-by: Ary Borenszweig <asterite@gmail.com>
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Jul 2, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(docs): Brillig VM docs
(noir-lang/noir#9078)
fix(expand): missing struct member visibility, and use "crate" instead
of "super" when possible (noir-lang/noir#9081)
fix: revert #9044 (noir-lang/noir#9080)
chore: error on infinite recursion
(noir-lang/noir#9063)
fix(fuzz): Assign to an index variable to sequence side effects
(noir-lang/noir#9056)
chore: bump cargo deny (noir-lang/noir#9077)
chore: Refactor `ConstrainEqFailed` to have `Option<String>` for `msg`
(noir-lang/noir#9065)
chore(debug): Toggle SSA locations when printing SSA
(noir-lang/noir#9066)
chore(acir_gen): Improve error message for radix decomposition
(noir-lang/noir#9068)
chore(ci): fix upload of benchmark results on master
(noir-lang/noir#9069)
fix: check both coordinates for point doubling
(noir-lang/noir#9039)
fix: codegen generic type arguments
(noir-lang/noir#9044)
chore: remove accidentally committed files
(noir-lang/noir#9048)
fix(fuzz): enable print in comptime_vs_brillig_direct
(noir-lang/noir#9045)
chore: move a couple of test_utils functions into a module
(noir-lang/noir#9052)
chore: bump external pinned commits
(noir-lang/noir#9046)
fix: put constraint failure after binary operations that overflow
(noir-lang/noir#9023)
fix(ssa): Remove array from cache in constant folding if it's an
argument to a `Call` (noir-lang/noir#9040)
feat: some `nargo expand` fixes related to function and method calls
(noir-lang/noir#9038)
feat(ssa_fuzzer): custom mutations
(noir-lang/noir#8988)
feat: implicit coercion of str and fmtstr into CtString
(noir-lang/noir#9032)
chore: add idempotency check to `remove_unreachable_functions`
(noir-lang/noir#9017)
chore: add logging for signature failure cases which break barretenberg
(noir-lang/noir#9030)
feat(ssa): Handle `println` in the SSA interpreter
(noir-lang/noir#9028)
chore: don't compute used globals during DIE
(noir-lang/noir#9029)
fix(ssa_fuzzer): nested conditions in loops
(noir-lang/noir#8997)
fix(fuzz): Consider `==` turning into `!=` equivalent
(noir-lang/noir#9025)
fix(fuzz): Avoid overflow in `gen_unary`
(noir-lang/noir#9024)
fix(ssa): Perform `mem2reg` before DIE
(noir-lang/noir#9018)
fix: Strange use of predicates in euclidian division
(noir-lang/noir#8934)
fix: compute the dominance frontier of the reverse cfg using the
extended cfg (noir-lang/noir#9019)
fix(fuzz): Handle overflow errors from the elaborator
(noir-lang/noir#9014)
feat: show why an assertion will always fail if it's a static string
(noir-lang/noir#9013)
chore(ssa): Add `SsaPass:and_then`
(noir-lang/noir#9016)
fix: Add a remove_unreachable_instructions SSA pass (with unreachable
terminator) (noir-lang/noir#9008)
feat: `nargo expand` for LSP
(noir-lang/noir#9012)
fix(mem2reg): Add the value in `ArraySet` to `aliased_references`
(noir-lang/noir#8976)
feat(debug): Print ssa locations along with ssa
(noir-lang/noir#9001)
chore: move `nargo expand` code to its own crate
(noir-lang/noir#9011)
chore: redo typo PR by donatik27
(noir-lang/noir#9004)
fix: recover generics when defining trait impl function
(noir-lang/noir#9009)
fix: replace public key with curve generators in inactive branches
(noir-lang/noir#8993)
fix(fuzz): Avoid overflowing binary ops in "no dynamic" mode
(noir-lang/noir#8996)
END_COMMIT_OVERRIDE

---------

Co-authored-by: AztecBot <tech@aztecprotocol.com>
Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
Co-authored-by: Ary Borenszweig <asterite@gmail.com>
danielntmd pushed a commit to danielntmd/aztec-packages that referenced this pull request Jul 16, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(docs): Brillig VM docs
(noir-lang/noir#9078)
fix(expand): missing struct member visibility, and use "crate" instead
of "super" when possible (noir-lang/noir#9081)
fix: revert AztecProtocol#9044 (noir-lang/noir#9080)
chore: error on infinite recursion
(noir-lang/noir#9063)
fix(fuzz): Assign to an index variable to sequence side effects
(noir-lang/noir#9056)
chore: bump cargo deny (noir-lang/noir#9077)
chore: Refactor `ConstrainEqFailed` to have `Option<String>` for `msg`
(noir-lang/noir#9065)
chore(debug): Toggle SSA locations when printing SSA
(noir-lang/noir#9066)
chore(acir_gen): Improve error message for radix decomposition
(noir-lang/noir#9068)
chore(ci): fix upload of benchmark results on master
(noir-lang/noir#9069)
fix: check both coordinates for point doubling
(noir-lang/noir#9039)
fix: codegen generic type arguments
(noir-lang/noir#9044)
chore: remove accidentally committed files
(noir-lang/noir#9048)
fix(fuzz): enable print in comptime_vs_brillig_direct
(noir-lang/noir#9045)
chore: move a couple of test_utils functions into a module
(noir-lang/noir#9052)
chore: bump external pinned commits
(noir-lang/noir#9046)
fix: put constraint failure after binary operations that overflow
(noir-lang/noir#9023)
fix(ssa): Remove array from cache in constant folding if it's an
argument to a `Call` (noir-lang/noir#9040)
feat: some `nargo expand` fixes related to function and method calls
(noir-lang/noir#9038)
feat(ssa_fuzzer): custom mutations
(noir-lang/noir#8988)
feat: implicit coercion of str and fmtstr into CtString
(noir-lang/noir#9032)
chore: add idempotency check to `remove_unreachable_functions`
(noir-lang/noir#9017)
chore: add logging for signature failure cases which break barretenberg
(noir-lang/noir#9030)
feat(ssa): Handle `println` in the SSA interpreter
(noir-lang/noir#9028)
chore: don't compute used globals during DIE
(noir-lang/noir#9029)
fix(ssa_fuzzer): nested conditions in loops
(noir-lang/noir#8997)
fix(fuzz): Consider `==` turning into `!=` equivalent
(noir-lang/noir#9025)
fix(fuzz): Avoid overflow in `gen_unary`
(noir-lang/noir#9024)
fix(ssa): Perform `mem2reg` before DIE
(noir-lang/noir#9018)
fix: Strange use of predicates in euclidian division
(noir-lang/noir#8934)
fix: compute the dominance frontier of the reverse cfg using the
extended cfg (noir-lang/noir#9019)
fix(fuzz): Handle overflow errors from the elaborator
(noir-lang/noir#9014)
feat: show why an assertion will always fail if it's a static string
(noir-lang/noir#9013)
chore(ssa): Add `SsaPass:and_then`
(noir-lang/noir#9016)
fix: Add a remove_unreachable_instructions SSA pass (with unreachable
terminator) (noir-lang/noir#9008)
feat: `nargo expand` for LSP
(noir-lang/noir#9012)
fix(mem2reg): Add the value in `ArraySet` to `aliased_references`
(noir-lang/noir#8976)
feat(debug): Print ssa locations along with ssa
(noir-lang/noir#9001)
chore: move `nargo expand` code to its own crate
(noir-lang/noir#9011)
chore: redo typo PR by donatik27
(noir-lang/noir#9004)
fix: recover generics when defining trait impl function
(noir-lang/noir#9009)
fix: replace public key with curve generators in inactive branches
(noir-lang/noir#8993)
fix(fuzz): Avoid overflowing binary ops in "no dynamic" mode
(noir-lang/noir#8996)
END_COMMIT_OVERRIDE

---------

Co-authored-by: AztecBot <tech@aztecprotocol.com>
Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
Co-authored-by: Ary Borenszweig <asterite@gmail.com>
AztecBot added a commit to AztecProtocol/barretenberg that referenced this pull request Dec 3, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(docs): Brillig VM docs
(noir-lang/noir#9078)
fix(expand): missing struct member visibility, and use "crate" instead
of "super" when possible (noir-lang/noir#9081)
fix: revert #9044 (noir-lang/noir#9080)
chore: error on infinite recursion
(noir-lang/noir#9063)
fix(fuzz): Assign to an index variable to sequence side effects
(noir-lang/noir#9056)
chore: bump cargo deny (noir-lang/noir#9077)
chore: Refactor `ConstrainEqFailed` to have `Option<String>` for `msg`
(noir-lang/noir#9065)
chore(debug): Toggle SSA locations when printing SSA
(noir-lang/noir#9066)
chore(acir_gen): Improve error message for radix decomposition
(noir-lang/noir#9068)
chore(ci): fix upload of benchmark results on master
(noir-lang/noir#9069)
fix: check both coordinates for point doubling
(noir-lang/noir#9039)
fix: codegen generic type arguments
(noir-lang/noir#9044)
chore: remove accidentally committed files
(noir-lang/noir#9048)
fix(fuzz): enable print in comptime_vs_brillig_direct
(noir-lang/noir#9045)
chore: move a couple of test_utils functions into a module
(noir-lang/noir#9052)
chore: bump external pinned commits
(noir-lang/noir#9046)
fix: put constraint failure after binary operations that overflow
(noir-lang/noir#9023)
fix(ssa): Remove array from cache in constant folding if it's an
argument to a `Call` (noir-lang/noir#9040)
feat: some `nargo expand` fixes related to function and method calls
(noir-lang/noir#9038)
feat(ssa_fuzzer): custom mutations
(noir-lang/noir#8988)
feat: implicit coercion of str and fmtstr into CtString
(noir-lang/noir#9032)
chore: add idempotency check to `remove_unreachable_functions`
(noir-lang/noir#9017)
chore: add logging for signature failure cases which break barretenberg
(noir-lang/noir#9030)
feat(ssa): Handle `println` in the SSA interpreter
(noir-lang/noir#9028)
chore: don't compute used globals during DIE
(noir-lang/noir#9029)
fix(ssa_fuzzer): nested conditions in loops
(noir-lang/noir#8997)
fix(fuzz): Consider `==` turning into `!=` equivalent
(noir-lang/noir#9025)
fix(fuzz): Avoid overflow in `gen_unary`
(noir-lang/noir#9024)
fix(ssa): Perform `mem2reg` before DIE
(noir-lang/noir#9018)
fix: Strange use of predicates in euclidian division
(noir-lang/noir#8934)
fix: compute the dominance frontier of the reverse cfg using the
extended cfg (noir-lang/noir#9019)
fix(fuzz): Handle overflow errors from the elaborator
(noir-lang/noir#9014)
feat: show why an assertion will always fail if it's a static string
(noir-lang/noir#9013)
chore(ssa): Add `SsaPass:and_then`
(noir-lang/noir#9016)
fix: Add a remove_unreachable_instructions SSA pass (with unreachable
terminator) (noir-lang/noir#9008)
feat: `nargo expand` for LSP
(noir-lang/noir#9012)
fix(mem2reg): Add the value in `ArraySet` to `aliased_references`
(noir-lang/noir#8976)
feat(debug): Print ssa locations along with ssa
(noir-lang/noir#9001)
chore: move `nargo expand` code to its own crate
(noir-lang/noir#9011)
chore: redo typo PR by donatik27
(noir-lang/noir#9004)
fix: recover generics when defining trait impl function
(noir-lang/noir#9009)
fix: replace public key with curve generators in inactive branches
(noir-lang/noir#8993)
fix(fuzz): Avoid overflowing binary ops in "no dynamic" mode
(noir-lang/noir#8996)
END_COMMIT_OVERRIDE

---------

Co-authored-by: AztecBot <tech@aztecprotocol.com>
Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
Co-authored-by: Ary Borenszweig <asterite@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants