gccrs: Fix self-referential associated type resolution
gccrs now correctly resolves self-referential associated types in traits.
This commit addresses an issue in gccrs where self-referential associated types within traits were not being resolved correctly. The fix involves allowing recursive resolution in the trait item resolution logic, ensuring that such types are handled properly. This resolves a specific bug related to trait resolution.
In Details
The TraitItemReference::resolve_item function in gccrs, responsible for resolving references to items within traits (like associated types), has been modified to support recursion. This change is necessary to correctly handle associated types that refer back to the trait they are defined in, a scenario previously causing resolution failures. This impacts the correctness of trait elaboration and type inference for complex generic structures.
- Associated Type
- In Rust traits, an associated type is a placeholder for a type that the trait implementation will define. It allows traits to be more generic. For example, a
Iteratortrait might have an associated typeItemrepresenting the type of element the iterator yields. - Trait
- A collection of method signatures and associated types that define a shared behavior. Other types can implement a trait to provide that behavior.
- Self-referential
- A type or construct that refers to itself. In this context, it means an associated type within a trait that directly or indirectly refers back to the trait itself.
- HIR
- High-level Intermediate Representation. A representation of the code that is closer to the source language than machine code, used by the Rust compiler (and gccrs) for analysis and transformations before generating lower-level code.