no normalization of unused alias definitions in defaulted type parameters
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
We don't eagerly try to normalize defaulted type parameters, allowing the default to use a diverging alias.
This example was mentioned by @BoxyUwU within the context of the new solver, in https://github.com/rust-lang/trait-system-refactor-initiative/issues/139#issuecomment-2704576249, but this equally applies to both solvers. Therefore, we can track this in an issue here instead.
#![feature(rustc_attrs)]
#![rustc_no_implicit_bounds]
trait Trait {
type Diverges<D: Trait>;
}
impl<T> Trait for T {
type Diverges<D: Trait> = D::Diverges<D>;
}
struct Bar<T = <u8 as Trait>::Diverges<u8>>(*mut T);
passes in both solvers.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the Rust reproducer in the issue and the linked trait-system discussion, then trace how defaulted type parameters are handled by both solvers. Done means the diverging alias is normalized consistently and regression coverage verifies the behavior in both solvers.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100