Merge pull request #20845 from hvitved/rust/cache-infer-certain-type

Rust: Cache `inferCertainType`
This commit is contained in:
Tom Hvitved
2025-11-18 20:59:38 +01:00
committed by GitHub

View File

@@ -9,6 +9,7 @@ private import TypeMention
private import typeinference.FunctionType
private import typeinference.FunctionOverloading as FunctionOverloading
private import typeinference.BlanketImplementation as BlanketImplementation
private import codeql.rust.internal.CachedStages
private import codeql.typeinference.internal.TypeInference
private import codeql.rust.frameworks.stdlib.Stdlib
private import codeql.rust.frameworks.stdlib.Builtins as Builtins
@@ -419,9 +420,10 @@ module CertainTypeInference {
* Holds if `n` has complete and certain type information and if `n` has the
* resulting type at `path`.
*/
pragma[nomagic]
cached
Type inferCertainType(AstNode n, TypePath path) {
result = inferAnnotatedType(n, path)
result = inferAnnotatedType(n, path) and
Stages::TypeInferenceStage::ref()
or
result = inferCertainCallExprType(n, path)
or
@@ -3407,8 +3409,6 @@ private Type inferCastExprType(CastExpr ce, TypePath path) {
cached
private module Cached {
private import codeql.rust.internal.CachedStages
/** Holds if `receiver` is the receiver of a method call with an implicit dereference. */
cached
predicate receiverHasImplicitDeref(AstNode receiver) {