Skip to content

fix: use unit for fmtstr without variables#10456

Merged
jfecher merged 2 commits intomasterfrom
ab/fmtstr-unit
Nov 10, 2025
Merged

fix: use unit for fmtstr without variables#10456
jfecher merged 2 commits intomasterfrom
ab/fmtstr-unit

Conversation

@asterite
Copy link
Collaborator

@asterite asterite commented Nov 10, 2025

Description

Problem

Resolves #9729

Summary

Alternative to #10003

When I found this issue I also thought one way to fix this was to have Unit be the same as an empty Tuple, meaning removing the Unit type.

However, another solution could be to special case a fmtstr with no variables to have Unit be the type instead of an empty tuple. In fact this is what we do with a function's Env, which is Unit when it doesn't capture any variables:

let env_type =
if captured_vars.is_empty() { Type::Unit } else { Type::Tuple(captured_vars) };

Then we need to handle Unit in a couple of places, but that's it.

Additional Context

User Documentation

Check one:

  • No user documentation needed.
  • Changes in docs/ included in this PR.
  • [For Experimental Features] Changes in docs/ 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 'Test Suite Duration'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: a219e7a Previous: e422898 Ratio
test_report_zkpassport_noir-ecdsa_ 2 s 1 s 2

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

CC: @TomAFrench

@asterite asterite requested a review from a team November 10, 2025 19:16
@jfecher jfecher added this pull request to the merge queue Nov 10, 2025
Merged via the queue into master with commit 0896c56 Nov 10, 2025
132 checks passed
@jfecher jfecher deleted the ab/fmtstr-unit branch November 10, 2025 19:50
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 11, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
fix(brillig_gen): Switch to iterative variable liveness
(noir-lang/noir#10460)
feat: remove unnecessary mutation of blackbox functions during
flattening (noir-lang/noir#10182)
chore: revert "fix: revert "feat(ACIR): reuse element_type_sizes blocks
with… (noir-lang/noir#10461)
chore: green light for acir (native_types) audit
(noir-lang/noir#10381)
chore: lock Cargo.lock in cargo-binstall
(noir-lang/noir#10459)
fix(acir-gen): Use the side effect variable in `slice_pop_back`
(noir-lang/noir#10455)
fix: correct location for out of bounds match case integer
(noir-lang/noir#10454)
fix: Defunctionalize foreign functions in pre-SSA pass over mAST
(noir-lang/noir#10160)
fix: use unit for fmtstr without variables
(noir-lang/noir#10456)
chore(docs): Update tinyjs app tutorial for versioned docs
(noir-lang/noir#10453)
fix(frontend): Resolve to correct type on fmtstr interpolation error
(noir-lang/noir#10450)
fix: avoid producing duplicate private error messages
(noir-lang/noir#10449)
chore(docs): update dependencies and installation instructions in NoirJS
tutorial and examples (noir-lang/noir#10400)
fix(compiler): Improve error message for impl on primitive types
(noir-lang/noir#10430)
(noir-lang/noir#10442)
chore: get trait as non-mut
(noir-lang/noir#10447)
chore(frontend): Tuple dereference chain unit test and minor method
reorg (noir-lang/noir#10410)
fix(doc): analyze sub-modules imports before self
(noir-lang/noir#10390)
chore: green light for blackbox_solver audit
(noir-lang/noir#10372)
chore: use `get_last_condition` in `link_condition`
(noir-lang/noir#10424)
chore: bump external pinned commits
(noir-lang/noir#10443)
feat: primitive types doc comments
(noir-lang/noir#10432)
chore(frontend): Trait impl Self path unit tests
(noir-lang/noir#10437)
END_COMMIT_OVERRIDE
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 11, 2025
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
fix(brillig_gen): Switch to iterative variable liveness (noir-lang/noir#10460)
feat: remove unnecessary mutation of blackbox functions during flattening (noir-lang/noir#10182)
chore: revert "fix: revert "feat(ACIR): reuse element_type_sizes blocks with… (noir-lang/noir#10461)
chore: green light for acir (native_types) audit (noir-lang/noir#10381)
chore: lock Cargo.lock in cargo-binstall (noir-lang/noir#10459)
fix(acir-gen): Use the side effect variable in `slice_pop_back` (noir-lang/noir#10455)
fix: correct location for out of bounds match case integer (noir-lang/noir#10454)
fix: Defunctionalize foreign functions in pre-SSA pass over mAST (noir-lang/noir#10160)
fix: use unit for fmtstr without variables (noir-lang/noir#10456)
chore(docs): Update tinyjs app tutorial for versioned docs (noir-lang/noir#10453)
fix(frontend): Resolve to correct type on fmtstr interpolation error (noir-lang/noir#10450)
fix: avoid producing duplicate private error messages (noir-lang/noir#10449)
chore(docs): update dependencies and installation instructions in NoirJS tutorial and examples (noir-lang/noir#10400)
fix(compiler): Improve error message for impl on primitive types (noir-lang/noir#10430) (noir-lang/noir#10442)
chore: get trait as non-mut (noir-lang/noir#10447)
chore(frontend): Tuple dereference chain unit test and minor method reorg (noir-lang/noir#10410)
fix(doc): analyze sub-modules imports before self (noir-lang/noir#10390)
chore: green light for blackbox_solver audit (noir-lang/noir#10372)
chore: use `get_last_condition` in `link_condition` (noir-lang/noir#10424)
chore: bump external pinned commits (noir-lang/noir#10443)
feat: primitive types doc comments (noir-lang/noir#10432)
chore(frontend): Trait impl Self path unit tests (noir-lang/noir#10437)
END_COMMIT_OVERRIDE
github-merge-queue bot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Nov 11, 2025
Automated pull of nightly from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
fix(brillig_gen): Switch to iterative variable liveness
(noir-lang/noir#10460)
feat: remove unnecessary mutation of blackbox functions during
flattening (noir-lang/noir#10182)
chore: revert "fix: revert "feat(ACIR): reuse element_type_sizes blocks
with… (noir-lang/noir#10461)
chore: green light for acir (native_types) audit
(noir-lang/noir#10381)
chore: lock Cargo.lock in cargo-binstall
(noir-lang/noir#10459)
fix(acir-gen): Use the side effect variable in `slice_pop_back`
(noir-lang/noir#10455)
fix: correct location for out of bounds match case integer
(noir-lang/noir#10454)
fix: Defunctionalize foreign functions in pre-SSA pass over mAST
(noir-lang/noir#10160)
fix: use unit for fmtstr without variables
(noir-lang/noir#10456)
chore(docs): Update tinyjs app tutorial for versioned docs
(noir-lang/noir#10453)
fix(frontend): Resolve to correct type on fmtstr interpolation error
(noir-lang/noir#10450)
fix: avoid producing duplicate private error messages
(noir-lang/noir#10449)
chore(docs): update dependencies and installation instructions in NoirJS
tutorial and examples (noir-lang/noir#10400)
fix(compiler): Improve error message for impl on primitive types
(noir-lang/noir#10430)
(noir-lang/noir#10442)
chore: get trait as non-mut
(noir-lang/noir#10447)
chore(frontend): Tuple dereference chain unit test and minor method
reorg (noir-lang/noir#10410)
fix(doc): analyze sub-modules imports before self
(noir-lang/noir#10390)
chore: green light for blackbox_solver audit
(noir-lang/noir#10372)
chore: use `get_last_condition` in `link_condition`
(noir-lang/noir#10424)
chore: bump external pinned commits
(noir-lang/noir#10443)
feat: primitive types doc comments
(noir-lang/noir#10432)
chore(frontend): Trait impl Self path unit tests
(noir-lang/noir#10437)
END_COMMIT_OVERRIDE
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.

Type mismatch assigning fmtstr without interpolation to a variable

2 participants