Fixes return type leaking into other function contexts
GCC Rust prevents return type information from incorrectly bleeding into unrelated function contexts during type checking.
This commit corrects an issue in GCC Rust where expected return type information could leak into unrelated function contexts. This typically happened when return expressions were in a const position and needed to resolve within nested blocks. The change ensures that return type hints are properly managed and popped from the context after use, preventing type unification errors in complex expressions.
In Details
The TypeCheckContext::pop_return_type function in gccrs has been modified to handle the clearing of expected return types more robustly. Previously, expected types used for unification hints (e.g., for Try) could persist and affect type checking in subsequent, unrelated blocks, especially in const contexts. The fix ensures these hints are properly discarded.
- return type
- The data type of the value that a function or method returns to its caller.
- type unification
- The process of determining if two types are compatible or equivalent, often by finding a common type or by substituting type variables. This is a core part of type inference and checking.
- const position
- Refers to contexts where values are expected to be evaluated at compile time, such as in constant initializers or associated constants. This can impose stricter type checking rules.
- type context
- The set of type information, including declared types, inferred types, and active type variables, available to the compiler at a particular point in the source code.