chore: print ACIR AssertZero as an equation#9970
Conversation
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'Execution Time'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.
| Benchmark suite | Current: 6f07f9b | Previous: 323303f | Ratio |
|---|---|---|---|
rollup-block-root-single-tx |
0.005 s |
0.003 s |
1.67 |
rollup-checkpoint-merge |
0.004 s |
0.003 s |
1.33 |
This comment was automatically generated by workflow using github-action-benchmark.
CC: @TomAFrench
There was a problem hiding this comment.
⚠️ 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: 6f07f9b | Previous: 323303f | Ratio |
|---|---|---|---|
test_report_zkpassport_noir_rsa_ |
2 s |
1 s |
2 |
This comment was automatically generated by workflow using github-action-benchmark.
CC: @TomAFrench
The more special cases we allow would also increase the complexity of the Display impl and the parser. I think just handling the most common simplifications is sufficient. |
|
Sounds good, we can revert some of the simplifications (let me know which ones). I tried to leave the ones where they end with a single witness equal to something else, like a constant, witness or multiplication. |
|
In the end now there's only one simplification when printing an AssertZero opcode, which I'll explain now. I noticed that when ACIR is generated, we usually tend to equate a new witness to an expression that relies on previous witnesses. I think that this happens is not by chance, as it makes sense we slowly build a larger equation where new witness have conditions on previous witnesses, etc. So, when printing, we find the largest witness that has a 1 or -1 coefficient, and we show that as equal to everything else. This turns out to be pretty accurate and, in most cases, the expressions are shown as "an assignment" to this new witness. For example, here's part of the ACIR for the Note how every expression is almost always "the next witness must be equal to ...". Another example, And for this Noir program which I was just playing with: fn main(x: u32, y: u32, z: u32) {
assert_eq(z, x * 4 + y * 5 + 2);
}we get this ACIR: It's very easy to see that |
vezenovm
left a comment
There was a problem hiding this comment.
Some nits, but I think this makes reading ACIR much easier.
Co-authored-by: Maxim Vezenov <mvezenov@gmail.com>
… into ab/acir-print-assert-zero
vezenovm
left a comment
There was a problem hiding this comment.
Looks good! Much prettier to read
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore: print ACIR AssertZero as an equation (noir-lang/noir#9970) chore(acir): Switch to inline SSA for slice intrinsics tests (noir-lang/noir#10000) fix(fuzz): Handle divisor of zero msg in error comparison (noir-lang/noir#9995) fix(ssa): Handle OOB indexing of slice literals in `remove_unreachalbe_instructions` (noir-lang/noir#9999) chore: Add `DataFlowGraph::instruction_result` for getting a known number of results (noir-lang/noir#9989) chore(ast_fuzzer): Allow passing compilation options to cvise tool (noir-lang/noir#9996) chore(ssa_gen): Do not generate out of bounds checks for array assignments in ACIR (noir-lang/noir#9992) chore: add more to/from le/be bits/bytes edge case tests (noir-lang/noir#9906) fix: Disable early mem2reg (noir-lang/noir#9987) chore(ci): free up space on github runner (noir-lang/noir#9994) chore(ssa): Nits in `remove_bit_shift` and `remove_if_else` (noir-lang/noir#9965) chore(ssa_executor): add compilation example (noir-lang/noir#9937) chore(acir): More arrays refactors (noir-lang/noir#9962) chore(test): add panicking tests for 'defunctionalize' (noir-lang/noir#8510) chore: remove_if_else docs and refactors (noir-lang/noir#9929) chore(acir): Do not copy element type sizes array when initializing (noir-lang/noir#9955) fix: correct max_bit_size when left-shifting (noir-lang/noir#9770) chore: checked_to_unchecked enhancements from audit review (noir-lang/noir#9958) chore(ssa): Remove `offset` from `ArrayGet` and `ArraySet` (noir-lang/noir#9956) chore(acir): Add some unit tests for arrays and light refactors (noir-lang/noir#9953) chore: add regression test for #9852 (noir-lang/noir#9960) chore(fuzz): Add error equivalency for bit-shift overflow in the SSA interpreter (noir-lang/noir#9957) feat(cli): Visualize the Control Flow Graph (noir-lang/noir#9867) chore: minor constant_folding refactors (noir-lang/noir#9954) chore!: several ACIR serialisation changes (noir-lang/noir#8134) chore(ci): only send slack notifications during the week (noir-lang/noir#9946) chore: assumes no load-store in array_set (noir-lang/noir#9940) chore(acir): Arrays module doc comments (noir-lang/noir#9947) fix: correctly handle unusual radices in `ToRadix` decompositions (noir-lang/noir#9941) fix(ssa): Start with checked operations in index calculations (noir-lang/noir#9888) feat: no need to use dummy slice values in remove_if_else (noir-lang/noir#9928) chore: bump external pinned commits (noir-lang/noir#9938) chore: redo typo PR by viktorking7 (noir-lang/noir#9939) chore: Release Noir(1.0.0-beta.13) (noir-lang/noir#9737) chore(ssa): Validate array operands (noir-lang/noir#9932) chore(licm): Add `CanBeHoistedResult::WithRefCount` (noir-lang/noir#9849) chore(ci): alert in slack if fuzzer fails (noir-lang/noir#9910) fix(fmt): missing skip whitespace when formatting match (noir-lang/noir#9905) chore(acir_gen): New shared_context module and some additional unit tests (noir-lang/noir#9895) chore: bump external pinned commits (noir-lang/noir#9902) chore: validate SSA intrinsics arguments and return types (noir-lang/noir#9892) chore(die): small nit to remove a check which is not useful (noir-lang/noir#9898) chore: implement Display for brillig (noir-lang/noir#9893) chore(acir_gen): Call module (noir-lang/noir#9896) feat: allow initializing dynamic arrays (noir-lang/noir#9899) fix(acir_gen): Handle flattening of numeric types when an `Array` contains a `DynamicArray` (noir-lang/noir#9887) fix(mem2reg): Do not attempt to analyze an instruction simplified to a global (noir-lang/noir#9882) fix: error on returning slice from main (noir-lang/noir#9636) fix(acir_gen): Fix entry point indices (noir-lang/noir#9881) chore: move `ram_blowup_regression` to be a compile-only test (noir-lang/noir#9874) chore: validate SSA call arguments (noir-lang/noir#9876) fix(ssa): Simplify always-fail range constraint (noir-lang/noir#9885) chore(fuzz): Refactor logging in the AST fuzzer (noir-lang/noir#9884) chore(ssa_fuzzer): refactor brillig target (noir-lang/noir#9821) fix(fuzz): Always introduce a local binding before match (noir-lang/noir#9883) chore(acir_gen): Switching existing ACIR gen tests to use parser and cleanup test module (noir-lang/noir#9878) chore(acir_gen): Remove Brillig execution with constant arguments (noir-lang/noir#9879) fix: disallow `_` in where clauses, and disallow unused trait impl generics (noir-lang/noir#9871) chore: bump external pinned commits (noir-lang/noir#9875) feat: LSP lightweight mode (noir-lang/noir#9869) chore: use `w` prefix for ACIR witnesses (noir-lang/noir#9839) chore: greenlight remove enable side effects (noir-lang/noir#9833) fix(fuzz): Avoid OOB when `in_no_dynamic` mode (noir-lang/noir#9858) chore(ssa): Run purity analysis before preprocessing of functions (noir-lang/noir#9837) fix: check for signed division overflow (noir-lang/noir#9857) chore: Add tests from post-order PR (noir-lang/noir#9846) chore(acir): Parse full program (foldable functions) (noir-lang/noir#9859) chore: greenlight remove_bit_shifts (revised) (noir-lang/noir#9813) feat(die): Prune unused entry block parameters for non-entry points (noir-lang/noir#9843) chore: greenlight check_u128_mul_overflow (noir-lang/noir#9759) chore: greenlight `remove_unreachable_instructions` for new requirements (noir-lang/noir#9810) chore: use enum for instruction deduplication safety (noir-lang/noir#9824) feat(LSP): signature help for macro attributes (noir-lang/noir#9536) feat(LSP): folding ranges (noir-lang/noir#9854) chore(die): IncrementRc/DecrementRc comments (noir-lang/noir#9855) chore(ownership): Add tests for cloning nested arrays returned from indexing (noir-lang/noir#9789) chore: validate that all jmpif conditions are boolean (noir-lang/noir#9850) chore: bump external pinned commits (noir-lang/noir#9848) chore(opt): Fetch set of Brillig entry points without reachability and recursive functions computation (noir-lang/noir#9844) chore: tests for map in stdlib (noir-lang/noir#9676) chore(ssa): Brillig entry point specialization post check (noir-lang/noir#9845) chore: delete some unused snapshots (noir-lang/noir#9841) feat(ssa): SSA CLI (noir-lang/noir#9826) chore: more ACIR parser usages in tests, and optimize general optimizations (noir-lang/noir#9836) chore(die): Remove RC tracker (noir-lang/noir#9809) feat: better check_u128_mul_overflow logic when an operand is constant (noir-lang/noir#9835) chore: increase number of cases tried in PR fuzzing (noir-lang/noir#9829) chore: remove variable flag from poseidon2 hash (noir-lang/noir#9834) chore: enforce that we only visit blocks once with new deque type (noir-lang/noir#9825) chore(test): add tests for unconstrained `main` recursion (noir-lang/noir#8551) chore: adding tests to vec (noir-lang/noir#9715) feat(fuzz): Allow index OOB with a small probability (noir-lang/noir#9803) chore(die): Encapsulate array access checks in separate module (noir-lang/noir#9828) chore: use the ACIR parser in redundant_ranges tests (noir-lang/noir#9827) chore: prefer `From` for infallible numeric casts (noir-lang/noir#9802) chore: add a regression test for #4663 (noir-lang/noir#9819) chore: bump linked bb version (noir-lang/noir#9237) chore: use `DataFlowGraph` over `Function` in constant_folding (noir-lang/noir#9811) chore: add a regression test for #6285 (noir-lang/noir#9817) feat(fuzz): Generate calls to `slice_remove` and `slice_insert` in the AST fuzzer (noir-lang/noir#9786) chore: no need to use `get_max_num_bits` if lhs is a constant (noir-lang/noir#9812) chore(ci): fix release workflow permissions (noir-lang/noir#9822) fix: do not simplify constraints with induction variable (noir-lang/noir#9806) fix(ssa): Do not hoist unsafe `array_get` in Brillig (noir-lang/noir#9805) fix(ownership): consider ident in nested l-value as used (noir-lang/noir#9793) fix(mem2reg): handle instruction simplified to multiple (noir-lang/noir#9782) fix: proper error when dividing by minus 1 (noir-lang/noir#9762) chore: tests for field in stdlib (noir-lang/noir#9677) chore(ssa_fuzzer): separate fuzzer runtimes + add brillig fuzz target (noir-lang/noir#9753) feat(ownership): Do not clone indexed call results containing arrays (noir-lang/noir#9791) Revert "chore: move `ram_blowup_regression` to be a compile-only test" (noir-lang/noir#9801) feat: reverse loop condition in brillig to avoid NOT instruction (noir-lang/noir#9779) chore: move `ram_blowup_regression` to be a compile-only test (noir-lang/noir#9790) fix(docs): moves docs to correct path for sharing domain with landing (noir-lang/noir#9687) chore: Check an inline always weight threshold during inline info computation (noir-lang/noir#9487) chore: remove snapshots from `test_programs` artifacts (noir-lang/noir#9788) chore: bump `@web/dev-server-esbuild` and `playwright` (noir-lang/noir#9781) fix(ssa): Replace failing array access with constraint and defaults (noir-lang/noir#9776) chore(die): Module doc comments (noir-lang/noir#9768) chore: encapsulate constant folding logic better (noir-lang/noir#9773) chore(ci): publish attestations on uploaded binaries (noir-lang/noir#9777) feat: remove useless jump when branching in brillig (noir-lang/noir#9778) chore: add `LoopContext::new` (noir-lang/noir#9720) feat(ownership): Do not clone nested Index expressions (noir-lang/noir#9772) chore(ci): add permissions to CI workflows (noir-lang/noir#9763) fix(ssa): Accurate purities of ArraySet and RC instructions in Brillig (noir-lang/noir#9736) chore: add test for when pending snapshots are committed (noir-lang/noir#9757) chore(docs): Copy latest getting started guide into versioned docs (noir-lang/noir#9755) chore: migrate away from fxhash to address advisory (noir-lang/noir#9752) fix(fuzz): Install `just` in nightly fuzz workflow (noir-lang/noir#9756) fix: wrong error message in brillig bit shift overflow (noir-lang/noir#9702) chore: bump dependencies (noir-lang/noir#9751) fix: left bit shift u128 would overflow Field (noir-lang/noir#9723) Revert "chore: migrate away from fxhash to address advisory (noir-lang/noir#9750)" chore: migrate away from fxhash to address advisory (noir-lang/noir#9750) chore: bump external pinned commits (noir-lang/noir#9748) chore(inlining): Skip weight calc for ACIR functions and recursive Brillig functions (noir-lang/noir#9739) chore(ssa): Consolidate should inline check into a single filter (noir-lang/noir#9738) feat: re-enable early mem2reg pass (noir-lang/noir#9744) fix(ssa): Mark whether an ArrayGet requires a predicate based upon the runtime (noir-lang/noir#9712) chore(licm): Identify untested code; refactoring; minor fixes (noir-lang/noir#9718) chore(docs): Update Aztec logo in noir docs (noir-lang/noir#9740) chore(ssa_fuzzer): refactor ssa fuzzer (noir-lang/noir#9651) fix: error on boolean shift overflow in interpreter (noir-lang/noir#9724) chore: do not inline acir calls in brillig (noir-lang/noir#9412) chore: remove empty main from frontend tests (noir-lang/noir#9726) chore: add tests for slice (noir-lang/noir#9650) chore: greenlight `make_constrain_not_equal` for audits (noir-lang/noir#9535) chore: Release Noir(1.0.0-beta.12) (noir-lang/noir#9565) chore(test): Filter `ram_blowup_regression` by default on local testing (noir-lang/noir#9721) chore(ci): force cargo-binstall to install tools in CI (noir-lang/noir#9722) fix(ssa): Simplify instructions during `remove_unreachable_instructions` (noir-lang/noir#9709) END_COMMIT_OVERRIDE Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore: print ACIR AssertZero as an equation (noir-lang/noir#9970) chore(acir): Switch to inline SSA for slice intrinsics tests (noir-lang/noir#10000) fix(fuzz): Handle divisor of zero msg in error comparison (noir-lang/noir#9995) fix(ssa): Handle OOB indexing of slice literals in `remove_unreachalbe_instructions` (noir-lang/noir#9999) chore: Add `DataFlowGraph::instruction_result` for getting a known number of results (noir-lang/noir#9989) chore(ast_fuzzer): Allow passing compilation options to cvise tool (noir-lang/noir#9996) chore(ssa_gen): Do not generate out of bounds checks for array assignments in ACIR (noir-lang/noir#9992) chore: add more to/from le/be bits/bytes edge case tests (noir-lang/noir#9906) fix: Disable early mem2reg (noir-lang/noir#9987) chore(ci): free up space on github runner (noir-lang/noir#9994) chore(ssa): Nits in `remove_bit_shift` and `remove_if_else` (noir-lang/noir#9965) chore(ssa_executor): add compilation example (noir-lang/noir#9937) chore(acir): More arrays refactors (noir-lang/noir#9962) chore(test): add panicking tests for 'defunctionalize' (noir-lang/noir#8510) chore: remove_if_else docs and refactors (noir-lang/noir#9929) chore(acir): Do not copy element type sizes array when initializing (noir-lang/noir#9955) fix: correct max_bit_size when left-shifting (noir-lang/noir#9770) chore: checked_to_unchecked enhancements from audit review (noir-lang/noir#9958) chore(ssa): Remove `offset` from `ArrayGet` and `ArraySet` (noir-lang/noir#9956) chore(acir): Add some unit tests for arrays and light refactors (noir-lang/noir#9953) chore: add regression test for #9852 (noir-lang/noir#9960) chore(fuzz): Add error equivalency for bit-shift overflow in the SSA interpreter (noir-lang/noir#9957) feat(cli): Visualize the Control Flow Graph (noir-lang/noir#9867) chore: minor constant_folding refactors (noir-lang/noir#9954) chore!: several ACIR serialisation changes (noir-lang/noir#8134) chore(ci): only send slack notifications during the week (noir-lang/noir#9946) chore: assumes no load-store in array_set (noir-lang/noir#9940) chore(acir): Arrays module doc comments (noir-lang/noir#9947) fix: correctly handle unusual radices in `ToRadix` decompositions (noir-lang/noir#9941) fix(ssa): Start with checked operations in index calculations (noir-lang/noir#9888) feat: no need to use dummy slice values in remove_if_else (noir-lang/noir#9928) chore: bump external pinned commits (noir-lang/noir#9938) chore: redo typo PR by viktorking7 (noir-lang/noir#9939) chore: Release Noir(1.0.0-beta.13) (noir-lang/noir#9737) chore(ssa): Validate array operands (noir-lang/noir#9932) chore(licm): Add `CanBeHoistedResult::WithRefCount` (noir-lang/noir#9849) chore(ci): alert in slack if fuzzer fails (noir-lang/noir#9910) fix(fmt): missing skip whitespace when formatting match (noir-lang/noir#9905) chore(acir_gen): New shared_context module and some additional unit tests (noir-lang/noir#9895) chore: bump external pinned commits (noir-lang/noir#9902) chore: validate SSA intrinsics arguments and return types (noir-lang/noir#9892) chore(die): small nit to remove a check which is not useful (noir-lang/noir#9898) chore: implement Display for brillig (noir-lang/noir#9893) chore(acir_gen): Call module (noir-lang/noir#9896) feat: allow initializing dynamic arrays (noir-lang/noir#9899) fix(acir_gen): Handle flattening of numeric types when an `Array` contains a `DynamicArray` (noir-lang/noir#9887) fix(mem2reg): Do not attempt to analyze an instruction simplified to a global (noir-lang/noir#9882) fix: error on returning slice from main (noir-lang/noir#9636) fix(acir_gen): Fix entry point indices (noir-lang/noir#9881) chore: move `ram_blowup_regression` to be a compile-only test (noir-lang/noir#9874) chore: validate SSA call arguments (noir-lang/noir#9876) fix(ssa): Simplify always-fail range constraint (noir-lang/noir#9885) chore(fuzz): Refactor logging in the AST fuzzer (noir-lang/noir#9884) chore(ssa_fuzzer): refactor brillig target (noir-lang/noir#9821) fix(fuzz): Always introduce a local binding before match (noir-lang/noir#9883) chore(acir_gen): Switching existing ACIR gen tests to use parser and cleanup test module (noir-lang/noir#9878) chore(acir_gen): Remove Brillig execution with constant arguments (noir-lang/noir#9879) fix: disallow `_` in where clauses, and disallow unused trait impl generics (noir-lang/noir#9871) chore: bump external pinned commits (noir-lang/noir#9875) feat: LSP lightweight mode (noir-lang/noir#9869) chore: use `w` prefix for ACIR witnesses (noir-lang/noir#9839) chore: greenlight remove enable side effects (noir-lang/noir#9833) fix(fuzz): Avoid OOB when `in_no_dynamic` mode (noir-lang/noir#9858) chore(ssa): Run purity analysis before preprocessing of functions (noir-lang/noir#9837) fix: check for signed division overflow (noir-lang/noir#9857) chore: Add tests from post-order PR (noir-lang/noir#9846) chore(acir): Parse full program (foldable functions) (noir-lang/noir#9859) chore: greenlight remove_bit_shifts (revised) (noir-lang/noir#9813) feat(die): Prune unused entry block parameters for non-entry points (noir-lang/noir#9843) chore: greenlight check_u128_mul_overflow (noir-lang/noir#9759) chore: greenlight `remove_unreachable_instructions` for new requirements (noir-lang/noir#9810) chore: use enum for instruction deduplication safety (noir-lang/noir#9824) feat(LSP): signature help for macro attributes (noir-lang/noir#9536) feat(LSP): folding ranges (noir-lang/noir#9854) chore(die): IncrementRc/DecrementRc comments (noir-lang/noir#9855) chore(ownership): Add tests for cloning nested arrays returned from indexing (noir-lang/noir#9789) chore: validate that all jmpif conditions are boolean (noir-lang/noir#9850) chore: bump external pinned commits (noir-lang/noir#9848) chore(opt): Fetch set of Brillig entry points without reachability and recursive functions computation (noir-lang/noir#9844) chore: tests for map in stdlib (noir-lang/noir#9676) chore(ssa): Brillig entry point specialization post check (noir-lang/noir#9845) chore: delete some unused snapshots (noir-lang/noir#9841) feat(ssa): SSA CLI (noir-lang/noir#9826) chore: more ACIR parser usages in tests, and optimize general optimizations (noir-lang/noir#9836) chore(die): Remove RC tracker (noir-lang/noir#9809) feat: better check_u128_mul_overflow logic when an operand is constant (noir-lang/noir#9835) chore: increase number of cases tried in PR fuzzing (noir-lang/noir#9829) chore: remove variable flag from poseidon2 hash (noir-lang/noir#9834) chore: enforce that we only visit blocks once with new deque type (noir-lang/noir#9825) chore(test): add tests for unconstrained `main` recursion (noir-lang/noir#8551) chore: adding tests to vec (noir-lang/noir#9715) feat(fuzz): Allow index OOB with a small probability (noir-lang/noir#9803) chore(die): Encapsulate array access checks in separate module (noir-lang/noir#9828) chore: use the ACIR parser in redundant_ranges tests (noir-lang/noir#9827) chore: prefer `From` for infallible numeric casts (noir-lang/noir#9802) chore: add a regression test for #4663 (noir-lang/noir#9819) chore: bump linked bb version (noir-lang/noir#9237) chore: use `DataFlowGraph` over `Function` in constant_folding (noir-lang/noir#9811) chore: add a regression test for #6285 (noir-lang/noir#9817) feat(fuzz): Generate calls to `slice_remove` and `slice_insert` in the AST fuzzer (noir-lang/noir#9786) chore: no need to use `get_max_num_bits` if lhs is a constant (noir-lang/noir#9812) chore(ci): fix release workflow permissions (noir-lang/noir#9822) fix: do not simplify constraints with induction variable (noir-lang/noir#9806) fix(ssa): Do not hoist unsafe `array_get` in Brillig (noir-lang/noir#9805) fix(ownership): consider ident in nested l-value as used (noir-lang/noir#9793) fix(mem2reg): handle instruction simplified to multiple (noir-lang/noir#9782) fix: proper error when dividing by minus 1 (noir-lang/noir#9762) chore: tests for field in stdlib (noir-lang/noir#9677) chore(ssa_fuzzer): separate fuzzer runtimes + add brillig fuzz target (noir-lang/noir#9753) feat(ownership): Do not clone indexed call results containing arrays (noir-lang/noir#9791) Revert "chore: move `ram_blowup_regression` to be a compile-only test" (noir-lang/noir#9801) feat: reverse loop condition in brillig to avoid NOT instruction (noir-lang/noir#9779) chore: move `ram_blowup_regression` to be a compile-only test (noir-lang/noir#9790) fix(docs): moves docs to correct path for sharing domain with landing (noir-lang/noir#9687) chore: Check an inline always weight threshold during inline info computation (noir-lang/noir#9487) chore: remove snapshots from `test_programs` artifacts (noir-lang/noir#9788) chore: bump `@web/dev-server-esbuild` and `playwright` (noir-lang/noir#9781) fix(ssa): Replace failing array access with constraint and defaults (noir-lang/noir#9776) chore(die): Module doc comments (noir-lang/noir#9768) chore: encapsulate constant folding logic better (noir-lang/noir#9773) chore(ci): publish attestations on uploaded binaries (noir-lang/noir#9777) feat: remove useless jump when branching in brillig (noir-lang/noir#9778) chore: add `LoopContext::new` (noir-lang/noir#9720) feat(ownership): Do not clone nested Index expressions (noir-lang/noir#9772) chore(ci): add permissions to CI workflows (noir-lang/noir#9763) fix(ssa): Accurate purities of ArraySet and RC instructions in Brillig (noir-lang/noir#9736) chore: add test for when pending snapshots are committed (noir-lang/noir#9757) chore(docs): Copy latest getting started guide into versioned docs (noir-lang/noir#9755) chore: migrate away from fxhash to address advisory (noir-lang/noir#9752) fix(fuzz): Install `just` in nightly fuzz workflow (noir-lang/noir#9756) fix: wrong error message in brillig bit shift overflow (noir-lang/noir#9702) chore: bump dependencies (noir-lang/noir#9751) fix: left bit shift u128 would overflow Field (noir-lang/noir#9723) Revert "chore: migrate away from fxhash to address advisory (noir-lang/noir#9750)" chore: migrate away from fxhash to address advisory (noir-lang/noir#9750) chore: bump external pinned commits (noir-lang/noir#9748) chore(inlining): Skip weight calc for ACIR functions and recursive Brillig functions (noir-lang/noir#9739) chore(ssa): Consolidate should inline check into a single filter (noir-lang/noir#9738) feat: re-enable early mem2reg pass (noir-lang/noir#9744) fix(ssa): Mark whether an ArrayGet requires a predicate based upon the runtime (noir-lang/noir#9712) chore(licm): Identify untested code; refactoring; minor fixes (noir-lang/noir#9718) chore(docs): Update Aztec logo in noir docs (noir-lang/noir#9740) chore(ssa_fuzzer): refactor ssa fuzzer (noir-lang/noir#9651) fix: error on boolean shift overflow in interpreter (noir-lang/noir#9724) chore: do not inline acir calls in brillig (noir-lang/noir#9412) chore: remove empty main from frontend tests (noir-lang/noir#9726) chore: add tests for slice (noir-lang/noir#9650) chore: greenlight `make_constrain_not_equal` for audits (noir-lang/noir#9535) chore: Release Noir(1.0.0-beta.12) (noir-lang/noir#9565) chore(test): Filter `ram_blowup_regression` by default on local testing (noir-lang/noir#9721) chore(ci): force cargo-binstall to install tools in CI (noir-lang/noir#9722) fix(ssa): Simplify instructions during `remove_unreachable_instructions` (noir-lang/noir#9709) END_COMMIT_OVERRIDE
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore: print ACIR AssertZero as an equation (noir-lang/noir#9970) chore(acir): Switch to inline SSA for slice intrinsics tests (noir-lang/noir#10000) fix(fuzz): Handle divisor of zero msg in error comparison (noir-lang/noir#9995) fix(ssa): Handle OOB indexing of slice literals in `remove_unreachalbe_instructions` (noir-lang/noir#9999) chore: Add `DataFlowGraph::instruction_result` for getting a known number of results (noir-lang/noir#9989) chore(ast_fuzzer): Allow passing compilation options to cvise tool (noir-lang/noir#9996) chore(ssa_gen): Do not generate out of bounds checks for array assignments in ACIR (noir-lang/noir#9992) chore: add more to/from le/be bits/bytes edge case tests (noir-lang/noir#9906) fix: Disable early mem2reg (noir-lang/noir#9987) chore(ci): free up space on github runner (noir-lang/noir#9994) chore(ssa): Nits in `remove_bit_shift` and `remove_if_else` (noir-lang/noir#9965) chore(ssa_executor): add compilation example (noir-lang/noir#9937) chore(acir): More arrays refactors (noir-lang/noir#9962) chore(test): add panicking tests for 'defunctionalize' (noir-lang/noir#8510) chore: remove_if_else docs and refactors (noir-lang/noir#9929) chore(acir): Do not copy element type sizes array when initializing (noir-lang/noir#9955) fix: correct max_bit_size when left-shifting (noir-lang/noir#9770) chore: checked_to_unchecked enhancements from audit review (noir-lang/noir#9958) chore(ssa): Remove `offset` from `ArrayGet` and `ArraySet` (noir-lang/noir#9956) chore(acir): Add some unit tests for arrays and light refactors (noir-lang/noir#9953) chore: add regression test for #9852 (noir-lang/noir#9960) chore(fuzz): Add error equivalency for bit-shift overflow in the SSA interpreter (noir-lang/noir#9957) feat(cli): Visualize the Control Flow Graph (noir-lang/noir#9867) chore: minor constant_folding refactors (noir-lang/noir#9954) chore!: several ACIR serialisation changes (noir-lang/noir#8134) chore(ci): only send slack notifications during the week (noir-lang/noir#9946) chore: assumes no load-store in array_set (noir-lang/noir#9940) chore(acir): Arrays module doc comments (noir-lang/noir#9947) fix: correctly handle unusual radices in `ToRadix` decompositions (noir-lang/noir#9941) fix(ssa): Start with checked operations in index calculations (noir-lang/noir#9888) feat: no need to use dummy slice values in remove_if_else (noir-lang/noir#9928) chore: bump external pinned commits (noir-lang/noir#9938) chore: redo typo PR by viktorking7 (noir-lang/noir#9939) chore: Release Noir(1.0.0-beta.13) (noir-lang/noir#9737) chore(ssa): Validate array operands (noir-lang/noir#9932) chore(licm): Add `CanBeHoistedResult::WithRefCount` (noir-lang/noir#9849) chore(ci): alert in slack if fuzzer fails (noir-lang/noir#9910) fix(fmt): missing skip whitespace when formatting match (noir-lang/noir#9905) chore(acir_gen): New shared_context module and some additional unit tests (noir-lang/noir#9895) chore: bump external pinned commits (noir-lang/noir#9902) chore: validate SSA intrinsics arguments and return types (noir-lang/noir#9892) chore(die): small nit to remove a check which is not useful (noir-lang/noir#9898) chore: implement Display for brillig (noir-lang/noir#9893) chore(acir_gen): Call module (noir-lang/noir#9896) feat: allow initializing dynamic arrays (noir-lang/noir#9899) fix(acir_gen): Handle flattening of numeric types when an `Array` contains a `DynamicArray` (noir-lang/noir#9887) fix(mem2reg): Do not attempt to analyze an instruction simplified to a global (noir-lang/noir#9882) fix: error on returning slice from main (noir-lang/noir#9636) fix(acir_gen): Fix entry point indices (noir-lang/noir#9881) chore: move `ram_blowup_regression` to be a compile-only test (noir-lang/noir#9874) chore: validate SSA call arguments (noir-lang/noir#9876) fix(ssa): Simplify always-fail range constraint (noir-lang/noir#9885) chore(fuzz): Refactor logging in the AST fuzzer (noir-lang/noir#9884) chore(ssa_fuzzer): refactor brillig target (noir-lang/noir#9821) fix(fuzz): Always introduce a local binding before match (noir-lang/noir#9883) chore(acir_gen): Switching existing ACIR gen tests to use parser and cleanup test module (noir-lang/noir#9878) chore(acir_gen): Remove Brillig execution with constant arguments (noir-lang/noir#9879) fix: disallow `_` in where clauses, and disallow unused trait impl generics (noir-lang/noir#9871) chore: bump external pinned commits (noir-lang/noir#9875) feat: LSP lightweight mode (noir-lang/noir#9869) chore: use `w` prefix for ACIR witnesses (noir-lang/noir#9839) chore: greenlight remove enable side effects (noir-lang/noir#9833) fix(fuzz): Avoid OOB when `in_no_dynamic` mode (noir-lang/noir#9858) chore(ssa): Run purity analysis before preprocessing of functions (noir-lang/noir#9837) fix: check for signed division overflow (noir-lang/noir#9857) chore: Add tests from post-order PR (noir-lang/noir#9846) chore(acir): Parse full program (foldable functions) (noir-lang/noir#9859) chore: greenlight remove_bit_shifts (revised) (noir-lang/noir#9813) feat(die): Prune unused entry block parameters for non-entry points (noir-lang/noir#9843) chore: greenlight check_u128_mul_overflow (noir-lang/noir#9759) chore: greenlight `remove_unreachable_instructions` for new requirements (noir-lang/noir#9810) chore: use enum for instruction deduplication safety (noir-lang/noir#9824) feat(LSP): signature help for macro attributes (noir-lang/noir#9536) feat(LSP): folding ranges (noir-lang/noir#9854) chore(die): IncrementRc/DecrementRc comments (noir-lang/noir#9855) chore(ownership): Add tests for cloning nested arrays returned from indexing (noir-lang/noir#9789) chore: validate that all jmpif conditions are boolean (noir-lang/noir#9850) chore: bump external pinned commits (noir-lang/noir#9848) chore(opt): Fetch set of Brillig entry points without reachability and recursive functions computation (noir-lang/noir#9844) chore: tests for map in stdlib (noir-lang/noir#9676) chore(ssa): Brillig entry point specialization post check (noir-lang/noir#9845) chore: delete some unused snapshots (noir-lang/noir#9841) feat(ssa): SSA CLI (noir-lang/noir#9826) chore: more ACIR parser usages in tests, and optimize general optimizations (noir-lang/noir#9836) chore(die): Remove RC tracker (noir-lang/noir#9809) feat: better check_u128_mul_overflow logic when an operand is constant (noir-lang/noir#9835) chore: increase number of cases tried in PR fuzzing (noir-lang/noir#9829) chore: remove variable flag from poseidon2 hash (noir-lang/noir#9834) chore: enforce that we only visit blocks once with new deque type (noir-lang/noir#9825) chore(test): add tests for unconstrained `main` recursion (noir-lang/noir#8551) chore: adding tests to vec (noir-lang/noir#9715) feat(fuzz): Allow index OOB with a small probability (noir-lang/noir#9803) chore(die): Encapsulate array access checks in separate module (noir-lang/noir#9828) chore: use the ACIR parser in redundant_ranges tests (noir-lang/noir#9827) chore: prefer `From` for infallible numeric casts (noir-lang/noir#9802) chore: add a regression test for #4663 (noir-lang/noir#9819) chore: bump linked bb version (noir-lang/noir#9237) chore: use `DataFlowGraph` over `Function` in constant_folding (noir-lang/noir#9811) chore: add a regression test for #6285 (noir-lang/noir#9817) feat(fuzz): Generate calls to `slice_remove` and `slice_insert` in the AST fuzzer (noir-lang/noir#9786) chore: no need to use `get_max_num_bits` if lhs is a constant (noir-lang/noir#9812) chore(ci): fix release workflow permissions (noir-lang/noir#9822) fix: do not simplify constraints with induction variable (noir-lang/noir#9806) fix(ssa): Do not hoist unsafe `array_get` in Brillig (noir-lang/noir#9805) fix(ownership): consider ident in nested l-value as used (noir-lang/noir#9793) fix(mem2reg): handle instruction simplified to multiple (noir-lang/noir#9782) fix: proper error when dividing by minus 1 (noir-lang/noir#9762) chore: tests for field in stdlib (noir-lang/noir#9677) chore(ssa_fuzzer): separate fuzzer runtimes + add brillig fuzz target (noir-lang/noir#9753) feat(ownership): Do not clone indexed call results containing arrays (noir-lang/noir#9791) Revert "chore: move `ram_blowup_regression` to be a compile-only test" (noir-lang/noir#9801) feat: reverse loop condition in brillig to avoid NOT instruction (noir-lang/noir#9779) chore: move `ram_blowup_regression` to be a compile-only test (noir-lang/noir#9790) fix(docs): moves docs to correct path for sharing domain with landing (noir-lang/noir#9687) chore: Check an inline always weight threshold during inline info computation (noir-lang/noir#9487) chore: remove snapshots from `test_programs` artifacts (noir-lang/noir#9788) chore: bump `@web/dev-server-esbuild` and `playwright` (noir-lang/noir#9781) fix(ssa): Replace failing array access with constraint and defaults (noir-lang/noir#9776) chore(die): Module doc comments (noir-lang/noir#9768) chore: encapsulate constant folding logic better (noir-lang/noir#9773) chore(ci): publish attestations on uploaded binaries (noir-lang/noir#9777) feat: remove useless jump when branching in brillig (noir-lang/noir#9778) chore: add `LoopContext::new` (noir-lang/noir#9720) feat(ownership): Do not clone nested Index expressions (noir-lang/noir#9772) chore(ci): add permissions to CI workflows (noir-lang/noir#9763) fix(ssa): Accurate purities of ArraySet and RC instructions in Brillig (noir-lang/noir#9736) chore: add test for when pending snapshots are committed (noir-lang/noir#9757) chore(docs): Copy latest getting started guide into versioned docs (noir-lang/noir#9755) chore: migrate away from fxhash to address advisory (noir-lang/noir#9752) fix(fuzz): Install `just` in nightly fuzz workflow (noir-lang/noir#9756) fix: wrong error message in brillig bit shift overflow (noir-lang/noir#9702) chore: bump dependencies (noir-lang/noir#9751) fix: left bit shift u128 would overflow Field (noir-lang/noir#9723) Revert "chore: migrate away from fxhash to address advisory (noir-lang/noir#9750)" chore: migrate away from fxhash to address advisory (noir-lang/noir#9750) chore: bump external pinned commits (noir-lang/noir#9748) chore(inlining): Skip weight calc for ACIR functions and recursive Brillig functions (noir-lang/noir#9739) chore(ssa): Consolidate should inline check into a single filter (noir-lang/noir#9738) feat: re-enable early mem2reg pass (noir-lang/noir#9744) fix(ssa): Mark whether an ArrayGet requires a predicate based upon the runtime (noir-lang/noir#9712) chore(licm): Identify untested code; refactoring; minor fixes (noir-lang/noir#9718) chore(docs): Update Aztec logo in noir docs (noir-lang/noir#9740) chore(ssa_fuzzer): refactor ssa fuzzer (noir-lang/noir#9651) fix: error on boolean shift overflow in interpreter (noir-lang/noir#9724) chore: do not inline acir calls in brillig (noir-lang/noir#9412) chore: remove empty main from frontend tests (noir-lang/noir#9726) chore: add tests for slice (noir-lang/noir#9650) chore: greenlight `make_constrain_not_equal` for audits (noir-lang/noir#9535) chore: Release Noir(1.0.0-beta.12) (noir-lang/noir#9565) chore(test): Filter `ram_blowup_regression` by default on local testing (noir-lang/noir#9721) chore(ci): force cargo-binstall to install tools in CI (noir-lang/noir#9722) fix(ssa): Simplify instructions during `remove_unreachable_instructions` (noir-lang/noir#9709) END_COMMIT_OVERRIDE
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore: print ACIR AssertZero as an equation (noir-lang/noir#9970) chore(acir): Switch to inline SSA for slice intrinsics tests (noir-lang/noir#10000) fix(fuzz): Handle divisor of zero msg in error comparison (noir-lang/noir#9995) fix(ssa): Handle OOB indexing of slice literals in `remove_unreachalbe_instructions` (noir-lang/noir#9999) chore: Add `DataFlowGraph::instruction_result` for getting a known number of results (noir-lang/noir#9989) chore(ast_fuzzer): Allow passing compilation options to cvise tool (noir-lang/noir#9996) chore(ssa_gen): Do not generate out of bounds checks for array assignments in ACIR (noir-lang/noir#9992) chore: add more to/from le/be bits/bytes edge case tests (noir-lang/noir#9906) fix: Disable early mem2reg (noir-lang/noir#9987) chore(ci): free up space on github runner (noir-lang/noir#9994) chore(ssa): Nits in `remove_bit_shift` and `remove_if_else` (noir-lang/noir#9965) chore(ssa_executor): add compilation example (noir-lang/noir#9937) chore(acir): More arrays refactors (noir-lang/noir#9962) chore(test): add panicking tests for 'defunctionalize' (noir-lang/noir#8510) chore: remove_if_else docs and refactors (noir-lang/noir#9929) chore(acir): Do not copy element type sizes array when initializing (noir-lang/noir#9955) fix: correct max_bit_size when left-shifting (noir-lang/noir#9770) chore: checked_to_unchecked enhancements from audit review (noir-lang/noir#9958) chore(ssa): Remove `offset` from `ArrayGet` and `ArraySet` (noir-lang/noir#9956) chore(acir): Add some unit tests for arrays and light refactors (noir-lang/noir#9953) chore: add regression test for #9852 (noir-lang/noir#9960) chore(fuzz): Add error equivalency for bit-shift overflow in the SSA interpreter (noir-lang/noir#9957) feat(cli): Visualize the Control Flow Graph (noir-lang/noir#9867) chore: minor constant_folding refactors (noir-lang/noir#9954) chore!: several ACIR serialisation changes (noir-lang/noir#8134) chore(ci): only send slack notifications during the week (noir-lang/noir#9946) chore: assumes no load-store in array_set (noir-lang/noir#9940) chore(acir): Arrays module doc comments (noir-lang/noir#9947) fix: correctly handle unusual radices in `ToRadix` decompositions (noir-lang/noir#9941) fix(ssa): Start with checked operations in index calculations (noir-lang/noir#9888) feat: no need to use dummy slice values in remove_if_else (noir-lang/noir#9928) chore: bump external pinned commits (noir-lang/noir#9938) chore: redo typo PR by viktorking7 (noir-lang/noir#9939) chore: Release Noir(1.0.0-beta.13) (noir-lang/noir#9737) chore(ssa): Validate array operands (noir-lang/noir#9932) chore(licm): Add `CanBeHoistedResult::WithRefCount` (noir-lang/noir#9849) chore(ci): alert in slack if fuzzer fails (noir-lang/noir#9910) fix(fmt): missing skip whitespace when formatting match (noir-lang/noir#9905) chore(acir_gen): New shared_context module and some additional unit tests (noir-lang/noir#9895) chore: bump external pinned commits (noir-lang/noir#9902) chore: validate SSA intrinsics arguments and return types (noir-lang/noir#9892) chore(die): small nit to remove a check which is not useful (noir-lang/noir#9898) chore: implement Display for brillig (noir-lang/noir#9893) chore(acir_gen): Call module (noir-lang/noir#9896) feat: allow initializing dynamic arrays (noir-lang/noir#9899) fix(acir_gen): Handle flattening of numeric types when an `Array` contains a `DynamicArray` (noir-lang/noir#9887) fix(mem2reg): Do not attempt to analyze an instruction simplified to a global (noir-lang/noir#9882) fix: error on returning slice from main (noir-lang/noir#9636) fix(acir_gen): Fix entry point indices (noir-lang/noir#9881) chore: move `ram_blowup_regression` to be a compile-only test (noir-lang/noir#9874) chore: validate SSA call arguments (noir-lang/noir#9876) fix(ssa): Simplify always-fail range constraint (noir-lang/noir#9885) chore(fuzz): Refactor logging in the AST fuzzer (noir-lang/noir#9884) chore(ssa_fuzzer): refactor brillig target (noir-lang/noir#9821) fix(fuzz): Always introduce a local binding before match (noir-lang/noir#9883) chore(acir_gen): Switching existing ACIR gen tests to use parser and cleanup test module (noir-lang/noir#9878) chore(acir_gen): Remove Brillig execution with constant arguments (noir-lang/noir#9879) fix: disallow `_` in where clauses, and disallow unused trait impl generics (noir-lang/noir#9871) chore: bump external pinned commits (noir-lang/noir#9875) feat: LSP lightweight mode (noir-lang/noir#9869) chore: use `w` prefix for ACIR witnesses (noir-lang/noir#9839) chore: greenlight remove enable side effects (noir-lang/noir#9833) fix(fuzz): Avoid OOB when `in_no_dynamic` mode (noir-lang/noir#9858) chore(ssa): Run purity analysis before preprocessing of functions (noir-lang/noir#9837) fix: check for signed division overflow (noir-lang/noir#9857) chore: Add tests from post-order PR (noir-lang/noir#9846) chore(acir): Parse full program (foldable functions) (noir-lang/noir#9859) chore: greenlight remove_bit_shifts (revised) (noir-lang/noir#9813) feat(die): Prune unused entry block parameters for non-entry points (noir-lang/noir#9843) chore: greenlight check_u128_mul_overflow (noir-lang/noir#9759) chore: greenlight `remove_unreachable_instructions` for new requirements (noir-lang/noir#9810) chore: use enum for instruction deduplication safety (noir-lang/noir#9824) feat(LSP): signature help for macro attributes (noir-lang/noir#9536) feat(LSP): folding ranges (noir-lang/noir#9854) chore(die): IncrementRc/DecrementRc comments (noir-lang/noir#9855) chore(ownership): Add tests for cloning nested arrays returned from indexing (noir-lang/noir#9789) chore: validate that all jmpif conditions are boolean (noir-lang/noir#9850) chore: bump external pinned commits (noir-lang/noir#9848) chore(opt): Fetch set of Brillig entry points without reachability and recursive functions computation (noir-lang/noir#9844) chore: tests for map in stdlib (noir-lang/noir#9676) chore(ssa): Brillig entry point specialization post check (noir-lang/noir#9845) chore: delete some unused snapshots (noir-lang/noir#9841) feat(ssa): SSA CLI (noir-lang/noir#9826) chore: more ACIR parser usages in tests, and optimize general optimizations (noir-lang/noir#9836) chore(die): Remove RC tracker (noir-lang/noir#9809) feat: better check_u128_mul_overflow logic when an operand is constant (noir-lang/noir#9835) chore: increase number of cases tried in PR fuzzing (noir-lang/noir#9829) chore: remove variable flag from poseidon2 hash (noir-lang/noir#9834) chore: enforce that we only visit blocks once with new deque type (noir-lang/noir#9825) chore(test): add tests for unconstrained `main` recursion (noir-lang/noir#8551) chore: adding tests to vec (noir-lang/noir#9715) feat(fuzz): Allow index OOB with a small probability (noir-lang/noir#9803) chore(die): Encapsulate array access checks in separate module (noir-lang/noir#9828) chore: use the ACIR parser in redundant_ranges tests (noir-lang/noir#9827) chore: prefer `From` for infallible numeric casts (noir-lang/noir#9802) chore: add a regression test for #4663 (noir-lang/noir#9819) chore: bump linked bb version (noir-lang/noir#9237) chore: use `DataFlowGraph` over `Function` in constant_folding (noir-lang/noir#9811) chore: add a regression test for #6285 (noir-lang/noir#9817) feat(fuzz): Generate calls to `slice_remove` and `slice_insert` in the AST fuzzer (noir-lang/noir#9786) chore: no need to use `get_max_num_bits` if lhs is a constant (noir-lang/noir#9812) chore(ci): fix release workflow permissions (noir-lang/noir#9822) fix: do not simplify constraints with induction variable (noir-lang/noir#9806) fix(ssa): Do not hoist unsafe `array_get` in Brillig (noir-lang/noir#9805) fix(ownership): consider ident in nested l-value as used (noir-lang/noir#9793) fix(mem2reg): handle instruction simplified to multiple (noir-lang/noir#9782) fix: proper error when dividing by minus 1 (noir-lang/noir#9762) chore: tests for field in stdlib (noir-lang/noir#9677) chore(ssa_fuzzer): separate fuzzer runtimes + add brillig fuzz target (noir-lang/noir#9753) feat(ownership): Do not clone indexed call results containing arrays (noir-lang/noir#9791) Revert "chore: move `ram_blowup_regression` to be a compile-only test" (noir-lang/noir#9801) feat: reverse loop condition in brillig to avoid NOT instruction (noir-lang/noir#9779) chore: move `ram_blowup_regression` to be a compile-only test (noir-lang/noir#9790) fix(docs): moves docs to correct path for sharing domain with landing (noir-lang/noir#9687) chore: Check an inline always weight threshold during inline info computation (noir-lang/noir#9487) chore: remove snapshots from `test_programs` artifacts (noir-lang/noir#9788) chore: bump `@web/dev-server-esbuild` and `playwright` (noir-lang/noir#9781) fix(ssa): Replace failing array access with constraint and defaults (noir-lang/noir#9776) chore(die): Module doc comments (noir-lang/noir#9768) chore: encapsulate constant folding logic better (noir-lang/noir#9773) chore(ci): publish attestations on uploaded binaries (noir-lang/noir#9777) feat: remove useless jump when branching in brillig (noir-lang/noir#9778) chore: add `LoopContext::new` (noir-lang/noir#9720) feat(ownership): Do not clone nested Index expressions (noir-lang/noir#9772) chore(ci): add permissions to CI workflows (noir-lang/noir#9763) fix(ssa): Accurate purities of ArraySet and RC instructions in Brillig (noir-lang/noir#9736) chore: add test for when pending snapshots are committed (noir-lang/noir#9757) chore(docs): Copy latest getting started guide into versioned docs (noir-lang/noir#9755) chore: migrate away from fxhash to address advisory (noir-lang/noir#9752) fix(fuzz): Install `just` in nightly fuzz workflow (noir-lang/noir#9756) fix: wrong error message in brillig bit shift overflow (noir-lang/noir#9702) chore: bump dependencies (noir-lang/noir#9751) fix: left bit shift u128 would overflow Field (noir-lang/noir#9723) Revert "chore: migrate away from fxhash to address advisory (noir-lang/noir#9750)" chore: migrate away from fxhash to address advisory (noir-lang/noir#9750) chore: bump external pinned commits (noir-lang/noir#9748) chore(inlining): Skip weight calc for ACIR functions and recursive Brillig functions (noir-lang/noir#9739) chore(ssa): Consolidate should inline check into a single filter (noir-lang/noir#9738) feat: re-enable early mem2reg pass (noir-lang/noir#9744) fix(ssa): Mark whether an ArrayGet requires a predicate based upon the runtime (noir-lang/noir#9712) chore(licm): Identify untested code; refactoring; minor fixes (noir-lang/noir#9718) chore(docs): Update Aztec logo in noir docs (noir-lang/noir#9740) chore(ssa_fuzzer): refactor ssa fuzzer (noir-lang/noir#9651) fix: error on boolean shift overflow in interpreter (noir-lang/noir#9724) chore: do not inline acir calls in brillig (noir-lang/noir#9412) chore: remove empty main from frontend tests (noir-lang/noir#9726) chore: add tests for slice (noir-lang/noir#9650) chore: greenlight `make_constrain_not_equal` for audits (noir-lang/noir#9535) chore: Release Noir(1.0.0-beta.12) (noir-lang/noir#9565) chore(test): Filter `ram_blowup_regression` by default on local testing (noir-lang/noir#9721) chore(ci): force cargo-binstall to install tools in CI (noir-lang/noir#9722) fix(ssa): Simplify instructions during `remove_unreachable_instructions` (noir-lang/noir#9709) END_COMMIT_OVERRIDE
Description
Problem
Resolves #9964
Summary
Now AssertZero expressions are printed as an equation. In the typical case that the expression looks like it's "assigning" to a witness (the largest witness in a linear combination), the expression is shown "as an assignment" to that witness. See #9970 (comment)
The ACIR parser in this case will parse any equation (there's a new test for this). This was done for simplicity (it's easier to parse an equation as a series of terms compared against other terms) but also for expressiveness, and further simplifications could be added and they'll always parse well. It might also help with writing ACIR tests as you can write the equation you want without having to follow a very specific order.
Additional Context
This isn't part of the auditing but:
There might be a few more special cases that we could print, like
w0 = w1*w2, but here I just went with the ones I see are most common.Documentation
Check one:
PR Checklist
cargo fmton default settings.