Skip to content

fix: slice push_back when length is not known#10206

Merged
guipublic merged 18 commits intomasterfrom
gd/issue_10170
Oct 30, 2025
Merged

fix: slice push_back when length is not known#10206
guipublic merged 18 commits intomasterfrom
gd/issue_10170

Conversation

@guipublic
Copy link
Contributor

Description

Problem*

Resolves #10170

Summary*

'Slice push_back' push after the slice length, which is not the same as the slice end when the capacity is bigger than the slice length.

Additional Context

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.

@guipublic guipublic changed the title slice push_back when length is not known fix: slice push_back when length is not known Oct 16, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Oct 16, 2025

Changes to number of Brillig opcodes executed

Generated at commit: 94b4668afa2335c68268f01c42d5d2c589901481, compared to commit: fcafe4e506fe1c2a5d4fc61fb923429db185e312

🧾 Summary (10% most significant diffs)

Program Brillig opcodes (+/-) %
slices_inliner_max +1,089 ❌ +43.01%
slices_inliner_zero +1,097 ❌ +40.18%

Full diff report 👇
Program Brillig opcodes (+/-) %
slices_inliner_max 3,621 (+1,089) +43.01%
slices_inliner_zero 3,827 (+1,097) +40.18%
slices_inliner_min 4,919 (+1,120) +29.48%
nested_array_in_slice_inliner_max 1,383 (+184) +15.35%
nested_array_in_slice_inliner_min 1,476 (+178) +13.71%
nested_array_in_slice_inliner_zero 1,476 (+178) +13.71%

@github-actions
Copy link
Contributor

github-actions bot commented Oct 16, 2025

Changes to Brillig bytecode sizes

Generated at commit: 94b4668afa2335c68268f01c42d5d2c589901481, compared to commit: fcafe4e506fe1c2a5d4fc61fb923429db185e312

🧾 Summary (10% most significant diffs)

Program Brillig opcodes (+/-) %
slices_inliner_zero +477 ❌ +29.00%
slices_inliner_max +473 ❌ +28.07%

Full diff report 👇
Program Brillig opcodes (+/-) %
slices_inliner_zero 2,122 (+477) +29.00%
slices_inliner_max 2,158 (+473) +28.07%
slices_inliner_min 2,671 (+491) +22.52%
nested_array_in_slice_inliner_max 1,014 (+13) +1.30%
nested_array_in_slice_inliner_min 817 (+8) +0.99%
nested_array_in_slice_inliner_zero 817 (+8) +0.99%

Copy link
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: c38428a Previous: fcafe4e Ratio
test_report_zkpassport_noir_rsa_ 2 s 1 s 2

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

CC: @TomAFrench

@github-actions
Copy link
Contributor

github-actions bot commented Oct 16, 2025

Changes to circuit sizes

Generated at commit: 94b4668afa2335c68268f01c42d5d2c589901481, compared to commit: fcafe4e506fe1c2a5d4fc61fb923429db185e312

🧾 Summary (10% most significant diffs)

Program ACIR opcodes (+/-) % Circuit size (+/-) %
slices +154 ❌ +91.12% +678 ❌ +20.82%
nested_array_in_slice +164 ❌ +20.15% +584 ❌ +11.99%

Full diff report 👇
Program ACIR opcodes (+/-) % Circuit size (+/-) %
slices 323 (+154) +91.12% 3,935 (+678) +20.82%
nested_array_in_slice 978 (+164) +20.15% 5,456 (+584) +11.99%
array_to_slice 59 (+14) +31.11% 3,024 (+98) +3.35%
slice_dynamic_index 804 (+5) +0.63% 5,157 (+62) +1.22%

@guipublic guipublic requested review from a team and vezenovm October 16, 2025 15:35
Copy link
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 'Execution Time'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: c9e985e Previous: 6424d4a Ratio
sha512-100-bytes 0.084 s 0.052 s 1.62

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

CC: @TomAFrench

@asterite
Copy link
Collaborator

asterite commented Oct 21, 2025

I think there's still something to improve here (I'll write this and then investigate it a bit more).

Given this code:

fn main(cond: bool, index: u32) -> pub Field {
    let mut slice = &[0, 1];
    if cond {
        slice = slice.push_back(2);
    }

    let slice = slice.push_back(3);
    let (slice, _) = slice.pop_back();

    let slice = slice.push_back(4);
    let (slice, _) = slice.pop_back();

    let slice = slice.push_back(5);
    let (slice, _) = slice.pop_back();

    let slice = slice.push_back(6);
    let (slice, _) = slice.pop_back();

    slice[index]
}

statically we can determine that the slice max length won't exceed 4, because we start with 2 elements, then conditionally push one more, then push one more and remove it, etc.

However, the generated ACIR has this:

func 0
private parameters: [w0, w1]
public parameters: []
return values: [w2]
...
INIT b0 = [w6, w7, w8, w9]
...
INIT b1 = [w15, w16, w17, w18]
...
INIT b3 = [w15, w16, w17, w18, w6]
...
INIT b5 = [w23, w24, w25, w26, w27, w6]
...
INIT b7 = [w30, w31, w32, w33, w34, w35, w6]
...
INIT b8 = [w38, w39, w40, w41, w42, w43, w44]
...

I'm not exactly sure why this happens. Maybe it's because when we do slice_pop_back we don't remove any elements from the back of the array. If we write the same Noir code but using slice_pop_front then the array stays at a maximum length of 4.

Out of curiosity, I'm going to try applying the change from #10179 in this PR to see what happens (I'll do it after running all tests locally).

@asterite
Copy link
Collaborator

Cool, it improved things a tiny bit :-)

Copy link
Collaborator

@asterite asterite left a comment

Choose a reason for hiding this comment

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

Looks good!

@guipublic guipublic added this pull request to the merge queue Oct 30, 2025
Merged via the queue into master with commit 084629e Oct 30, 2025
131 checks passed
@guipublic guipublic deleted the gd/issue_10170 branch October 30, 2025 17:12
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 5, 2025
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(frontend): Elaborator assignment unit tests (noir-lang/noir#10362)
fix(elaborator): Keep the status of the outer `unsafe` block if the inner is unnecessary (noir-lang/noir#10361)
chore: Start greenlight of interpreter (noir-lang/noir#10354)
chore: bump bb (noir-lang/noir#10359)
feat: `TypeDefinition::as_type_with_generics` (noir-lang/noir#10315)
fix(elaborator): Create new type variable for each generic kind of `FmtStr` (noir-lang/noir#10349)
chore: require ≥2 `FunctionId`'s in `create_apply_function` (noir-lang/noir#10329)
chore(test): Show that `#[oracle]` can take and return function pointers (noir-lang/noir#10178)
fix: check value of `ArraySet` during `array_set_optimization` (noir-lang/noir#10325)
chore(frontend): Comptime item generation unit tests (noir-lang/noir#10319)
chore: bump external pinned commits (noir-lang/noir#10236)
fix: do not simplify call-data values (noir-lang/noir#10032)
chore: update directory name (noir-lang/noir#10348)
feat: Add `#[must_use]` attribute to promote unused warning to an error (noir-lang/noir#10313)
chore: green light for basic_conditional audit (noir-lang/noir#10134)
chore: add unit tests to show some features of the analysis (noir-lang/noir#10286)
fix(print): Convert `HirType::Function` into `PrintableType::Tuple`  (noir-lang/noir#10189)
chore(frontend): Quoting/unquoting roundtrip testing  (noir-lang/noir#10327)
fix: remove leading stars from block doc comments (noir-lang/noir#10316)
fix: slice push_back when length is not known (noir-lang/noir#10206)
chore: Fix typo in defunctionalize docs (noir-lang/noir#10321)
chore(frontend): Elaborator comptime module docs (noir-lang/noir#10318)
fix: "No size for slice" when using black_box (noir-lang/noir#10312)
chore(audit): Fix vector items offset and other refactors (noir-lang/noir#10294)
chore(audit): Refactors and tests for reg-to-reg movements (noir-lang/noir#10293)
chore: Document each elaborator trait function (noir-lang/noir#10303)
chore(frontend): Elaborator impls documentation and additional tests  (noir-lang/noir#10302)
feat(ACIR): reuse element_type_sizes blocks with the same structure (noir-lang/noir#10231)
feat(SSA): simplify array_get from param (noir-lang/noir#10300)
chore(frontend): Elaborator lazy globals and documentation (noir-lang/noir#10260)
chore: avoid unrolling loop headers twice in unrolling passes (noir-lang/noir#10284)
chore(audit): Refactors in `BrilligGlobals`, `ConstantAllocation` and `VariableLiveness` (noir-lang/noir#10265)
chore: Move variable elaboration to its own file (noir-lang/noir#10285)
chore(ACIR): use u32::MAX for PLACEHOLDER_BRILLIG_INDEX (noir-lang/noir#10287)
feat(github): Add Security Policy (noir-lang/noir#10262)
chore(ACIR): handle TODO in `more_than_eq_var` (noir-lang/noir#10274)
chore(ACIR): document AcirValue (noir-lang/noir#10276)
chore(Brillig): no need to handle ArrayLen intrinsic (noir-lang/noir#10280)
chore(frontend): Split out trait impl setup when defining function meta data  (noir-lang/noir#10271)
feat(LSP): show errors on stdlib files (noir-lang/noir#10283)
chore: typos and some refactors, tests, etc in `noirc_evaluator/src/acir` (noir-lang/noir#10255)
chore(ACIR): handle TODO in radix_decompose (noir-lang/noir#10272)
feat(brillig): Automatic register deallocation (noir-lang/noir#10253)
chore: Add some detail to the trait documentation (noir-lang/noir#10273)
chore(frontend): Elaborator struct collection docs (noir-lang/noir#10266)
chore(ACIR): add a test for OpcodeResolutionError::AcirMainCallAttempted (noir-lang/noir#10254)
fix(ssa-interpreter): Add integer modulus to unfit `Field` if the value comes from a subtraction (noir-lang/noir#10241)
chore(frontend): Elaborator function module (noir-lang/noir#10252)
chore: typos and some refactors, tests, etc in `acvm/src/compiler` (noir-lang/noir#10111)
chore(ACIR): turn "todo" into "unreachable" (noir-lang/noir#10251)
chore(frontend): Elaborator module doc comments (noir-lang/noir#10249)
chore(ACIR): more Circuit, Expression and Opcode parsing (noir-lang/noir#10250)
chore: greenlight Elaborator visibility (noir-lang/noir#10248)
chore(audit): Brillig VM nits (noir-lang/noir#10237)
fix(mem2reg): Update array set value alias set and propagate array get result as alias  (noir-lang/noir#10242)
chore(frontend): Split up traits tests module into submodules (noir-lang/noir#10229)
chore(frontend): HIR printer module for inline macro expansion unit tests  (noir-lang/noir#10232)
chore(frontend): Modularize the Elaborator (noir-lang/noir#10202)
chore: Improve compilation time on `rollup-tx-base-public` (noir-lang/noir#10224)
fix(mem2reg): Updating referenced value invalidate addresses with unknown aliases (noir-lang/noir#10175)
chore(frontend): Re-organize frontend tests  (noir-lang/noir#10221)
chore(ACIR): simpler AsSlice implementation (noir-lang/noir#10214)
chore: clone indexed call results (noir-lang/noir#10140)
chore(acvm): Optimize logic ops (noir-lang/noir#10222)
chore: simplify `x > 0` to `x != 0` for unsigned types in ACIR (noir-lang/noir#10220)
fix(ACIR): correct brillig parameter slice length for dynamic arrays (noir-lang/noir#10198)
chore: redo typo PR by spuradage (noir-lang/noir#10226)
feat: attempt to inline successors in `simplify_cfg` (noir-lang/noir#9608)
chore: remove incremental mutation tests (noir-lang/noir#10212)
chore(ACIR): display/parse memory arrays as b0, b1, etc. (noir-lang/noir#10211)
chore(ACIR): no need to return types in `flatten` (noir-lang/noir#10210)
chore(ACIR): make it clear that modulo is only for signed integers (noir-lang/noir#10209)
chore: document precondition to unrolling SSA pass (noir-lang/noir#10208)
chore(ACIR): better display/parse for blackbox calls (noir-lang/noir#10157)
chore: assume Intrinsic::ArrayLen never reaches ACIR (noir-lang/noir#10201)
chore(ACIR): optimize slice_insert (noir-lang/noir#10164)
chore: add minimal reproductions for Cantina issues + typo fixes (noir-lang/noir#10120)
chore: address clippy warnings (noir-lang/noir#10207)
fix: address off-by-one error when removing casts before constraining to constant (noir-lang/noir#10194)
chore(ACIR): prefer displaying `ASSERT return_value = ...` (noir-lang/noir#10195)
chore: remove if-condition from `array_set_optimization_pre_check` (noir-lang/noir#10193)
chore(ssa_fuzzer): allow brillig fuzz target to work in multi threads (noir-lang/noir#10100)
chore: add incremental mutation testing (noir-lang/noir#10196)
chore: ensure that `useful_instructions` cannot overflow (noir-lang/noir#10173)
END_COMMIT_OVERRIDE

Co-authored-by: benesjan <janbenes1234@gmail.com>
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 5, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(frontend): Elaborator assignment unit tests
(noir-lang/noir#10362)
fix(elaborator): Keep the status of the outer `unsafe` block if the
inner is unnecessary (noir-lang/noir#10361)
chore: Start greenlight of interpreter
(noir-lang/noir#10354)
chore: bump bb (noir-lang/noir#10359)
feat: `TypeDefinition::as_type_with_generics`
(noir-lang/noir#10315)
fix(elaborator): Create new type variable for each generic kind of
`FmtStr` (noir-lang/noir#10349)
chore: require ≥2 `FunctionId`'s in `create_apply_function`
(noir-lang/noir#10329)
chore(test): Show that `#[oracle]` can take and return function pointers
(noir-lang/noir#10178)
fix: check value of `ArraySet` during `array_set_optimization`
(noir-lang/noir#10325)
chore(frontend): Comptime item generation unit tests
(noir-lang/noir#10319)
chore: bump external pinned commits
(noir-lang/noir#10236)
fix: do not simplify call-data values
(noir-lang/noir#10032)
chore: update directory name
(noir-lang/noir#10348)
feat: Add `#[must_use]` attribute to promote unused warning to an error
(noir-lang/noir#10313)
chore: green light for basic_conditional audit
(noir-lang/noir#10134)
chore: add unit tests to show some features of the analysis
(noir-lang/noir#10286)
fix(print): Convert `HirType::Function` into `PrintableType::Tuple`
(noir-lang/noir#10189)
chore(frontend): Quoting/unquoting roundtrip testing
(noir-lang/noir#10327)
fix: remove leading stars from block doc comments
(noir-lang/noir#10316)
fix: slice push_back when length is not known
(noir-lang/noir#10206)
chore: Fix typo in defunctionalize docs
(noir-lang/noir#10321)
chore(frontend): Elaborator comptime module docs
(noir-lang/noir#10318)
fix: "No size for slice" when using black_box
(noir-lang/noir#10312)
chore(audit): Fix vector items offset and other refactors
(noir-lang/noir#10294)
chore(audit): Refactors and tests for reg-to-reg movements
(noir-lang/noir#10293)
chore: Document each elaborator trait function
(noir-lang/noir#10303)
chore(frontend): Elaborator impls documentation and additional tests
(noir-lang/noir#10302)
feat(ACIR): reuse element_type_sizes blocks with the same structure
(noir-lang/noir#10231)
feat(SSA): simplify array_get from param
(noir-lang/noir#10300)
chore(frontend): Elaborator lazy globals and documentation
(noir-lang/noir#10260)
chore: avoid unrolling loop headers twice in unrolling passes
(noir-lang/noir#10284)
chore(audit): Refactors in `BrilligGlobals`, `ConstantAllocation` and
`VariableLiveness` (noir-lang/noir#10265)
chore: Move variable elaboration to its own file
(noir-lang/noir#10285)
chore(ACIR): use u32::MAX for PLACEHOLDER_BRILLIG_INDEX
(noir-lang/noir#10287)
feat(github): Add Security Policy
(noir-lang/noir#10262)
chore(ACIR): handle TODO in `more_than_eq_var`
(noir-lang/noir#10274)
chore(ACIR): document AcirValue
(noir-lang/noir#10276)
chore(Brillig): no need to handle ArrayLen intrinsic
(noir-lang/noir#10280)
chore(frontend): Split out trait impl setup when defining function meta
data (noir-lang/noir#10271)
feat(LSP): show errors on stdlib files
(noir-lang/noir#10283)
chore: typos and some refactors, tests, etc in
`noirc_evaluator/src/acir`
(noir-lang/noir#10255)
chore(ACIR): handle TODO in radix_decompose
(noir-lang/noir#10272)
feat(brillig): Automatic register deallocation
(noir-lang/noir#10253)
chore: Add some detail to the trait documentation
(noir-lang/noir#10273)
chore(frontend): Elaborator struct collection docs
(noir-lang/noir#10266)
chore(ACIR): add a test for OpcodeResolutionError::AcirMainCallAttempted
(noir-lang/noir#10254)
fix(ssa-interpreter): Add integer modulus to unfit `Field` if the value
comes from a subtraction (noir-lang/noir#10241)
chore(frontend): Elaborator function module
(noir-lang/noir#10252)
chore: typos and some refactors, tests, etc in `acvm/src/compiler`
(noir-lang/noir#10111)
chore(ACIR): turn "todo" into "unreachable"
(noir-lang/noir#10251)
chore(frontend): Elaborator module doc comments
(noir-lang/noir#10249)
chore(ACIR): more Circuit, Expression and Opcode parsing
(noir-lang/noir#10250)
chore: greenlight Elaborator visibility
(noir-lang/noir#10248)
chore(audit): Brillig VM nits
(noir-lang/noir#10237)
fix(mem2reg): Update array set value alias set and propagate array get
result as alias (noir-lang/noir#10242)
chore(frontend): Split up traits tests module into submodules
(noir-lang/noir#10229)
chore(frontend): HIR printer module for inline macro expansion unit
tests (noir-lang/noir#10232)
chore(frontend): Modularize the Elaborator
(noir-lang/noir#10202)
chore: Improve compilation time on `rollup-tx-base-public`
(noir-lang/noir#10224)
fix(mem2reg): Updating referenced value invalidate addresses with
unknown aliases (noir-lang/noir#10175)
chore(frontend): Re-organize frontend tests
(noir-lang/noir#10221)
chore(ACIR): simpler AsSlice implementation
(noir-lang/noir#10214)
chore: clone indexed call results
(noir-lang/noir#10140)
chore(acvm): Optimize logic ops
(noir-lang/noir#10222)
chore: simplify `x > 0` to `x != 0` for unsigned types in ACIR
(noir-lang/noir#10220)
fix(ACIR): correct brillig parameter slice length for dynamic arrays
(noir-lang/noir#10198)
chore: redo typo PR by spuradage
(noir-lang/noir#10226)
feat: attempt to inline successors in `simplify_cfg`
(noir-lang/noir#9608)
chore: remove incremental mutation tests
(noir-lang/noir#10212)
chore(ACIR): display/parse memory arrays as b0, b1, etc.
(noir-lang/noir#10211)
chore(ACIR): no need to return types in `flatten`
(noir-lang/noir#10210)
chore(ACIR): make it clear that modulo is only for signed integers
(noir-lang/noir#10209)
chore: document precondition to unrolling SSA pass
(noir-lang/noir#10208)
chore(ACIR): better display/parse for blackbox calls
(noir-lang/noir#10157)
chore: assume Intrinsic::ArrayLen never reaches ACIR
(noir-lang/noir#10201)
chore(ACIR): optimize slice_insert
(noir-lang/noir#10164)
chore: add minimal reproductions for Cantina issues + typo fixes
(noir-lang/noir#10120)
chore: address clippy warnings
(noir-lang/noir#10207)
fix: address off-by-one error when removing casts before constraining to
constant (noir-lang/noir#10194)
chore(ACIR): prefer displaying `ASSERT return_value = ...`
(noir-lang/noir#10195)
chore: remove if-condition from `array_set_optimization_pre_check`
(noir-lang/noir#10193)
chore(ssa_fuzzer): allow brillig fuzz target to work in multi threads
(noir-lang/noir#10100)
chore: add incremental mutation testing
(noir-lang/noir#10196)
chore: ensure that `useful_instructions` cannot overflow
(noir-lang/noir#10173)
END_COMMIT_OVERRIDE
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 5, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(frontend): Elaborator assignment unit tests
(noir-lang/noir#10362)
fix(elaborator): Keep the status of the outer `unsafe` block if the
inner is unnecessary (noir-lang/noir#10361)
chore: Start greenlight of interpreter
(noir-lang/noir#10354)
chore: bump bb (noir-lang/noir#10359)
feat: `TypeDefinition::as_type_with_generics`
(noir-lang/noir#10315)
fix(elaborator): Create new type variable for each generic kind of
`FmtStr` (noir-lang/noir#10349)
chore: require ≥2 `FunctionId`'s in `create_apply_function`
(noir-lang/noir#10329)
chore(test): Show that `#[oracle]` can take and return function pointers
(noir-lang/noir#10178)
fix: check value of `ArraySet` during `array_set_optimization`
(noir-lang/noir#10325)
chore(frontend): Comptime item generation unit tests
(noir-lang/noir#10319)
chore: bump external pinned commits
(noir-lang/noir#10236)
fix: do not simplify call-data values
(noir-lang/noir#10032)
chore: update directory name
(noir-lang/noir#10348)
feat: Add `#[must_use]` attribute to promote unused warning to an error
(noir-lang/noir#10313)
chore: green light for basic_conditional audit
(noir-lang/noir#10134)
chore: add unit tests to show some features of the analysis
(noir-lang/noir#10286)
fix(print): Convert `HirType::Function` into `PrintableType::Tuple`
(noir-lang/noir#10189)
chore(frontend): Quoting/unquoting roundtrip testing
(noir-lang/noir#10327)
fix: remove leading stars from block doc comments
(noir-lang/noir#10316)
fix: slice push_back when length is not known
(noir-lang/noir#10206)
chore: Fix typo in defunctionalize docs
(noir-lang/noir#10321)
chore(frontend): Elaborator comptime module docs
(noir-lang/noir#10318)
fix: "No size for slice" when using black_box
(noir-lang/noir#10312)
chore(audit): Fix vector items offset and other refactors
(noir-lang/noir#10294)
chore(audit): Refactors and tests for reg-to-reg movements
(noir-lang/noir#10293)
chore: Document each elaborator trait function
(noir-lang/noir#10303)
chore(frontend): Elaborator impls documentation and additional tests
(noir-lang/noir#10302)
feat(ACIR): reuse element_type_sizes blocks with the same structure
(noir-lang/noir#10231)
feat(SSA): simplify array_get from param
(noir-lang/noir#10300)
chore(frontend): Elaborator lazy globals and documentation
(noir-lang/noir#10260)
chore: avoid unrolling loop headers twice in unrolling passes
(noir-lang/noir#10284)
chore(audit): Refactors in `BrilligGlobals`, `ConstantAllocation` and
`VariableLiveness` (noir-lang/noir#10265)
chore: Move variable elaboration to its own file
(noir-lang/noir#10285)
chore(ACIR): use u32::MAX for PLACEHOLDER_BRILLIG_INDEX
(noir-lang/noir#10287)
feat(github): Add Security Policy
(noir-lang/noir#10262)
chore(ACIR): handle TODO in `more_than_eq_var`
(noir-lang/noir#10274)
chore(ACIR): document AcirValue
(noir-lang/noir#10276)
chore(Brillig): no need to handle ArrayLen intrinsic
(noir-lang/noir#10280)
chore(frontend): Split out trait impl setup when defining function meta
data (noir-lang/noir#10271)
feat(LSP): show errors on stdlib files
(noir-lang/noir#10283)
chore: typos and some refactors, tests, etc in
`noirc_evaluator/src/acir`
(noir-lang/noir#10255)
chore(ACIR): handle TODO in radix_decompose
(noir-lang/noir#10272)
feat(brillig): Automatic register deallocation
(noir-lang/noir#10253)
chore: Add some detail to the trait documentation
(noir-lang/noir#10273)
chore(frontend): Elaborator struct collection docs
(noir-lang/noir#10266)
chore(ACIR): add a test for OpcodeResolutionError::AcirMainCallAttempted
(noir-lang/noir#10254)
fix(ssa-interpreter): Add integer modulus to unfit `Field` if the value
comes from a subtraction (noir-lang/noir#10241)
chore(frontend): Elaborator function module
(noir-lang/noir#10252)
chore: typos and some refactors, tests, etc in `acvm/src/compiler`
(noir-lang/noir#10111)
chore(ACIR): turn "todo" into "unreachable"
(noir-lang/noir#10251)
chore(frontend): Elaborator module doc comments
(noir-lang/noir#10249)
chore(ACIR): more Circuit, Expression and Opcode parsing
(noir-lang/noir#10250)
chore: greenlight Elaborator visibility
(noir-lang/noir#10248)
chore(audit): Brillig VM nits
(noir-lang/noir#10237)
fix(mem2reg): Update array set value alias set and propagate array get
result as alias (noir-lang/noir#10242)
chore(frontend): Split up traits tests module into submodules
(noir-lang/noir#10229)
chore(frontend): HIR printer module for inline macro expansion unit
tests (noir-lang/noir#10232)
chore(frontend): Modularize the Elaborator
(noir-lang/noir#10202)
chore: Improve compilation time on `rollup-tx-base-public`
(noir-lang/noir#10224)
fix(mem2reg): Updating referenced value invalidate addresses with
unknown aliases (noir-lang/noir#10175)
chore(frontend): Re-organize frontend tests
(noir-lang/noir#10221)
chore(ACIR): simpler AsSlice implementation
(noir-lang/noir#10214)
chore: clone indexed call results
(noir-lang/noir#10140)
chore(acvm): Optimize logic ops
(noir-lang/noir#10222)
chore: simplify `x > 0` to `x != 0` for unsigned types in ACIR
(noir-lang/noir#10220)
fix(ACIR): correct brillig parameter slice length for dynamic arrays
(noir-lang/noir#10198)
chore: redo typo PR by spuradage
(noir-lang/noir#10226)
feat: attempt to inline successors in `simplify_cfg`
(noir-lang/noir#9608)
chore: remove incremental mutation tests
(noir-lang/noir#10212)
chore(ACIR): display/parse memory arrays as b0, b1, etc.
(noir-lang/noir#10211)
chore(ACIR): no need to return types in `flatten`
(noir-lang/noir#10210)
chore(ACIR): make it clear that modulo is only for signed integers
(noir-lang/noir#10209)
chore: document precondition to unrolling SSA pass
(noir-lang/noir#10208)
chore(ACIR): better display/parse for blackbox calls
(noir-lang/noir#10157)
chore: assume Intrinsic::ArrayLen never reaches ACIR
(noir-lang/noir#10201)
chore(ACIR): optimize slice_insert
(noir-lang/noir#10164)
chore: add minimal reproductions for Cantina issues + typo fixes
(noir-lang/noir#10120)
chore: address clippy warnings
(noir-lang/noir#10207)
fix: address off-by-one error when removing casts before constraining to
constant (noir-lang/noir#10194)
chore(ACIR): prefer displaying `ASSERT return_value = ...`
(noir-lang/noir#10195)
chore: remove if-condition from `array_set_optimization_pre_check`
(noir-lang/noir#10193)
chore(ssa_fuzzer): allow brillig fuzz target to work in multi threads
(noir-lang/noir#10100)
chore: add incremental mutation testing
(noir-lang/noir#10196)
chore: ensure that `useful_instructions` cannot overflow
(noir-lang/noir#10173)
END_COMMIT_OVERRIDE
charlielye pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 6, 2025
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore(frontend): Elaborator assignment unit tests (noir-lang/noir#10362)
fix(elaborator): Keep the status of the outer `unsafe` block if the inner is unnecessary (noir-lang/noir#10361)
chore: Start greenlight of interpreter (noir-lang/noir#10354)
chore: bump bb (noir-lang/noir#10359)
feat: `TypeDefinition::as_type_with_generics` (noir-lang/noir#10315)
fix(elaborator): Create new type variable for each generic kind of `FmtStr` (noir-lang/noir#10349)
chore: require ≥2 `FunctionId`'s in `create_apply_function` (noir-lang/noir#10329)
chore(test): Show that `#[oracle]` can take and return function pointers (noir-lang/noir#10178)
fix: check value of `ArraySet` during `array_set_optimization` (noir-lang/noir#10325)
chore(frontend): Comptime item generation unit tests (noir-lang/noir#10319)
chore: bump external pinned commits (noir-lang/noir#10236)
fix: do not simplify call-data values (noir-lang/noir#10032)
chore: update directory name (noir-lang/noir#10348)
feat: Add `#[must_use]` attribute to promote unused warning to an error (noir-lang/noir#10313)
chore: green light for basic_conditional audit (noir-lang/noir#10134)
chore: add unit tests to show some features of the analysis (noir-lang/noir#10286)
fix(print): Convert `HirType::Function` into `PrintableType::Tuple`  (noir-lang/noir#10189)
chore(frontend): Quoting/unquoting roundtrip testing  (noir-lang/noir#10327)
fix: remove leading stars from block doc comments (noir-lang/noir#10316)
fix: slice push_back when length is not known (noir-lang/noir#10206)
chore: Fix typo in defunctionalize docs (noir-lang/noir#10321)
chore(frontend): Elaborator comptime module docs (noir-lang/noir#10318)
fix: "No size for slice" when using black_box (noir-lang/noir#10312)
chore(audit): Fix vector items offset and other refactors (noir-lang/noir#10294)
chore(audit): Refactors and tests for reg-to-reg movements (noir-lang/noir#10293)
chore: Document each elaborator trait function (noir-lang/noir#10303)
chore(frontend): Elaborator impls documentation and additional tests  (noir-lang/noir#10302)
feat(ACIR): reuse element_type_sizes blocks with the same structure (noir-lang/noir#10231)
feat(SSA): simplify array_get from param (noir-lang/noir#10300)
chore(frontend): Elaborator lazy globals and documentation (noir-lang/noir#10260)
chore: avoid unrolling loop headers twice in unrolling passes (noir-lang/noir#10284)
chore(audit): Refactors in `BrilligGlobals`, `ConstantAllocation` and `VariableLiveness` (noir-lang/noir#10265)
chore: Move variable elaboration to its own file (noir-lang/noir#10285)
chore(ACIR): use u32::MAX for PLACEHOLDER_BRILLIG_INDEX (noir-lang/noir#10287)
feat(github): Add Security Policy (noir-lang/noir#10262)
chore(ACIR): handle TODO in `more_than_eq_var` (noir-lang/noir#10274)
chore(ACIR): document AcirValue (noir-lang/noir#10276)
chore(Brillig): no need to handle ArrayLen intrinsic (noir-lang/noir#10280)
chore(frontend): Split out trait impl setup when defining function meta data  (noir-lang/noir#10271)
feat(LSP): show errors on stdlib files (noir-lang/noir#10283)
chore: typos and some refactors, tests, etc in `noirc_evaluator/src/acir` (noir-lang/noir#10255)
chore(ACIR): handle TODO in radix_decompose (noir-lang/noir#10272)
feat(brillig): Automatic register deallocation (noir-lang/noir#10253)
chore: Add some detail to the trait documentation (noir-lang/noir#10273)
chore(frontend): Elaborator struct collection docs (noir-lang/noir#10266)
chore(ACIR): add a test for OpcodeResolutionError::AcirMainCallAttempted (noir-lang/noir#10254)
fix(ssa-interpreter): Add integer modulus to unfit `Field` if the value comes from a subtraction (noir-lang/noir#10241)
chore(frontend): Elaborator function module (noir-lang/noir#10252)
chore: typos and some refactors, tests, etc in `acvm/src/compiler` (noir-lang/noir#10111)
chore(ACIR): turn "todo" into "unreachable" (noir-lang/noir#10251)
chore(frontend): Elaborator module doc comments (noir-lang/noir#10249)
chore(ACIR): more Circuit, Expression and Opcode parsing (noir-lang/noir#10250)
chore: greenlight Elaborator visibility (noir-lang/noir#10248)
chore(audit): Brillig VM nits (noir-lang/noir#10237)
fix(mem2reg): Update array set value alias set and propagate array get result as alias  (noir-lang/noir#10242)
chore(frontend): Split up traits tests module into submodules (noir-lang/noir#10229)
chore(frontend): HIR printer module for inline macro expansion unit tests  (noir-lang/noir#10232)
chore(frontend): Modularize the Elaborator (noir-lang/noir#10202)
chore: Improve compilation time on `rollup-tx-base-public` (noir-lang/noir#10224)
fix(mem2reg): Updating referenced value invalidate addresses with unknown aliases (noir-lang/noir#10175)
chore(frontend): Re-organize frontend tests  (noir-lang/noir#10221)
chore(ACIR): simpler AsSlice implementation (noir-lang/noir#10214)
chore: clone indexed call results (noir-lang/noir#10140)
chore(acvm): Optimize logic ops (noir-lang/noir#10222)
chore: simplify `x > 0` to `x != 0` for unsigned types in ACIR (noir-lang/noir#10220)
fix(ACIR): correct brillig parameter slice length for dynamic arrays (noir-lang/noir#10198)
chore: redo typo PR by spuradage (noir-lang/noir#10226)
feat: attempt to inline successors in `simplify_cfg` (noir-lang/noir#9608)
chore: remove incremental mutation tests (noir-lang/noir#10212)
chore(ACIR): display/parse memory arrays as b0, b1, etc. (noir-lang/noir#10211)
chore(ACIR): no need to return types in `flatten` (noir-lang/noir#10210)
chore(ACIR): make it clear that modulo is only for signed integers (noir-lang/noir#10209)
chore: document precondition to unrolling SSA pass (noir-lang/noir#10208)
chore(ACIR): better display/parse for blackbox calls (noir-lang/noir#10157)
chore: assume Intrinsic::ArrayLen never reaches ACIR (noir-lang/noir#10201)
chore(ACIR): optimize slice_insert (noir-lang/noir#10164)
chore: add minimal reproductions for Cantina issues + typo fixes (noir-lang/noir#10120)
chore: address clippy warnings (noir-lang/noir#10207)
fix: address off-by-one error when removing casts before constraining to constant (noir-lang/noir#10194)
chore(ACIR): prefer displaying `ASSERT return_value = ...` (noir-lang/noir#10195)
chore: remove if-condition from `array_set_optimization_pre_check` (noir-lang/noir#10193)
chore(ssa_fuzzer): allow brillig fuzz target to work in multi threads (noir-lang/noir#10100)
chore: add incremental mutation testing (noir-lang/noir#10196)
chore: ensure that `useful_instructions` cannot overflow (noir-lang/noir#10173)
END_COMMIT_OVERRIDE

Co-authored-by: benesjan <janbenes1234@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.

bug(ACIR): repeated slice push_back/pop_back constantly increases slice length and leads to incorrect results

2 participants