Skip to content

fix: comptime code not mutating shared ref to struct field#9250

Merged
jfecher merged 9 commits intomasterfrom
jf/fix-9154
Jul 21, 2025
Merged

fix: comptime code not mutating shared ref to struct field#9250
jfecher merged 9 commits intomasterfrom
jf/fix-9154

Conversation

@jfecher
Copy link
Contributor

@jfecher jfecher commented Jul 18, 2025

Description

Problem*

Resolves #9154

Summary*

Fixes the issue by assigning to each struct/tuple field recursively during comptime which somewhat mimics SSA's flattening of tuple values.

Additional Context

I found a new issue while working on this in that the same code but using &mut instead of let mut returns false in acir.

So before this PR we had:

+---------+-------+----------+
|         | ACIR  | Comptime |
+---------+-------+----------+
| let mut | true  | false    |
| &mut    | false | false    |
+---------+-------+----------+

And after it we have:

+---------+-------+----------+
|         | ACIR  | Comptime |
+---------+-------+----------+
| let mut | true  | true     |
| &mut    | false | true     |
+---------+-------+----------+

But we want them all to be true.
I've created a separate issue for the &mut issue in ACIR here: #9251

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.

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: cfe5fd6 Previous: 80b04ec Ratio
private-kernel-inner 0.017 s 0.014 s 1.21
sha512-100-bytes 0.101 s 0.056 s 1.80

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

CC: @TomAFrench

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!

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 'Compilation Time'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: cfe5fd6 Previous: 80b04ec Ratio
rollup-block-root-empty 28.7 s 20.7 s 1.39

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

CC: @TomAFrench

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: cfe5fd6 Previous: 80b04ec Ratio
test_report_zkpassport_noir_rsa_ 2 s 1 s 2

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

CC: @TomAFrench

@jfecher jfecher added this pull request to the merge queue Jul 21, 2025
Merged via the queue into master with commit 3bec934 Jul 21, 2025
122 checks passed
@jfecher jfecher deleted the jf/fix-9154 branch July 21, 2025 16:19
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Jul 22, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
fix(SSA): validate MakeArray instruction
(noir-lang/noir#9183)
chore(docs): Add links to ACIR and source reference docs
(noir-lang/noir#9260)
fix: comptime code not mutating shared ref to struct field
(noir-lang/noir#9250)
fix(acir_gen): Bail out of `handle_constant_index` when it encounters
`DynamicArray` (noir-lang/noir#9259)
feat: allow paths in l-values
(noir-lang/noir#9254)
fix: parse AsTraitPath in type expressions
(noir-lang/noir#9258)
chore: add acir-gen unit tests per ssa instruction (2)
(noir-lang/noir#9185)
fix(licm): Ensure that all nested loops the current block is part of are
guaranteed to execute (noir-lang/noir#9249)
chore: bump external pinned commits
(noir-lang/noir#9256)
chore: enforce clippy in `ssa_fuzzer`
(noir-lang/noir#9247)
chore: clippy (noir-lang/noir#9246)
chore: skip `ram_blowup_regression` on PRs
(noir-lang/noir#9231)
chore: mark bignum as expected to pass
(noir-lang/noir#9244)
fix: suggest traits via visible reexports if they are not directly
visible (noir-lang/noir#9242)
fix: bind self when type-checking AsTraitPath
(noir-lang/noir#9236)
chore(docs): Include list to hashing libraries at the top of the
relevant docs page (noir-lang/noir#9239)
fix(fuzz): Use scoping for variable dynamism
(noir-lang/noir#9233)
fix(ssa): Change constraint message to "multiply"
(noir-lang/noir#9230)
feat: Add `compiler_unstable_features` to `Nargo.toml`
(noir-lang/noir#9219)
chore(fuzz): Increase loop frequency in Brillig
(noir-lang/noir#9228)
chore: bump noir-edwards dep
(noir-lang/noir#9229)
END_COMMIT_OVERRIDE

---------

Co-authored-by: AztecBot <tech@aztecprotocol.com>
Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
Co-authored-by: Jan Beneš <janbenes1234@gmail.com>
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Jul 22, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
fix(SSA): validate MakeArray instruction
(noir-lang/noir#9183)
chore(docs): Add links to ACIR and source reference docs
(noir-lang/noir#9260)
fix: comptime code not mutating shared ref to struct field
(noir-lang/noir#9250)
fix(acir_gen): Bail out of `handle_constant_index` when it encounters
`DynamicArray` (noir-lang/noir#9259)
feat: allow paths in l-values
(noir-lang/noir#9254)
fix: parse AsTraitPath in type expressions
(noir-lang/noir#9258)
chore: add acir-gen unit tests per ssa instruction (2)
(noir-lang/noir#9185)
fix(licm): Ensure that all nested loops the current block is part of are
guaranteed to execute (noir-lang/noir#9249)
chore: bump external pinned commits
(noir-lang/noir#9256)
chore: enforce clippy in `ssa_fuzzer`
(noir-lang/noir#9247)
chore: clippy (noir-lang/noir#9246)
chore: skip `ram_blowup_regression` on PRs
(noir-lang/noir#9231)
chore: mark bignum as expected to pass
(noir-lang/noir#9244)
fix: suggest traits via visible reexports if they are not directly
visible (noir-lang/noir#9242)
fix: bind self when type-checking AsTraitPath
(noir-lang/noir#9236)
chore(docs): Include list to hashing libraries at the top of the
relevant docs page (noir-lang/noir#9239)
fix(fuzz): Use scoping for variable dynamism
(noir-lang/noir#9233)
fix(ssa): Change constraint message to "multiply"
(noir-lang/noir#9230)
feat: Add `compiler_unstable_features` to `Nargo.toml`
(noir-lang/noir#9219)
chore(fuzz): Increase loop frequency in Brillig
(noir-lang/noir#9228)
chore: bump noir-edwards dep
(noir-lang/noir#9229)
END_COMMIT_OVERRIDE

---------

Co-authored-by: AztecBot <tech@aztecprotocol.com>
Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
Co-authored-by: Jan Beneš <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.

Comptime disagrees with ACIR on handling mutable references to tuple elements

2 participants