Optimize const function resolution in gccrs
GCC Rust's type query system now avoids resolving non-const functions in const contexts, improving performance.
Philip Herron refactored the query_type function in gccrs to only fully resolve const functions when operating within a constant evaluation context.
Previously, the system could inadvertently query and resolve non-const functions during method resolution, leading to unnecessary work.
This change optimizes the handling of constant expressions by preventing the full evaluation of unrelated non-constant code paths.
In Details
The query_type function within gccrs's type-checking system has been modified to be more efficient in constant evaluation contexts. Previously, during method resolution in a const context, it could lead to unnecessary full resolution of non-const function signatures and their bodies. This commit restricts query_type to only fully resolve const candidate functions when inside a const evaluation, thus avoiding overhead from non-const paths.
- const context
- In Rust, a context where computations must be known at compile time. This includes
const fnfunctions andconststatic variables. - query_type
- A function or system within the compiler responsible for retrieving and resolving type information. This often involves looking up types, checking their properties, and ensuring consistency.
- method resolution
- The process by which the compiler determines which method (function associated with a type) should be called based on the type of the object and the method signature.
- const fn
- A function in Rust that is guaranteed to be executable at compile time, provided its arguments are known at compile time. Its results can be used in constant contexts.