fix(compiler): Improve error message for impl on primitive types (#10430)#10442
Merged
jfecher merged 2 commits intonoir-lang:masterfrom Nov 10, 2025
Merged
Conversation
…r-lang#10430) The error message now correctly distinguishes between primitive types (which can have impls in stdlib) and other non-struct types (which cannot have impls). This matches Rust's error message style.
Contributor
|
Thank you for your contribution to the Noir language. Please do not force push to this branch after the Noir team have started review of this PR. Doing so will only delay us merging your PR as we will need to start the review process from scratch. Thanks for your understanding. |
jfecher
reviewed
Nov 10, 2025
Contributor
jfecher
left a comment
There was a problem hiding this comment.
LGTM - just capitalizing the message to match the rest of our error messages
...ing/nargo_cli/tests/snapshots/compile_failure/dep_impl_primitive/execute__tests__stderr.snap
Outdated
Show resolved
Hide resolved
...ing/nargo_cli/tests/snapshots/compile_failure/dep_impl_primitive/execute__tests__stderr.snap
Outdated
Show resolved
Hide resolved
Merged
via the queue into
noir-lang:master
with commit Nov 10, 2025
f51f756
169 of 173 checks passed
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The error message now correctly distinguishes between primitive types (which can have impls in stdlib) and other non-struct types (which cannot have impls). This matches Rust's error message style.
Description
Problem
Resolves #10430
Summary
Improves the error message when attempting to define
implfor primitive types.The previous message incorrectly stated that primitive types cannot have
implementation methods. The new message clarifies that primitive types can
have impls, but only when defined in the standard library.
Additional Context
The error message now correctly distinguishes between primitive types
(which can have impls in stdlib) and other non-struct types (which
cannot have impls). This matches Rust's error message style.
Changes
NonStructTypeInImplerror enum to track if type is primitiveUser 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 fmton default settings.