Expand description
Trait Resolution. See the rustc dev guide for more information on how this works.
Re-exports§
pub use self::normalize::NormalizeExt;
pub use self::project::normalize_inherent_projection;
pub use self::project::normalize_projection_ty;
Modules§
- auto_
trait - Support code for rustdoc and external tools. You really don’t want to be using this unless you need to.
- coherence 🔒
- See Rustc Dev Guide chapters on trait-resolution and trait-specialization for more info on how this works.
- const_
evaluatable - Checking that constant values used in types can be successfully evaluated.
- dyn_
compatibility 🔒 - “Dyn-compatibility” refers to the ability for a trait to be converted to a trait object. In general, traits may only be converted to a trait object if certain criteria are met.
- effects
- engine 🔒
- fulfill 🔒
- misc
- Miscellaneous type-system utilities that are too small to deserve their own modules.
- normalize
- Deeply normalize types using the old trait solver.
- outlives_
bounds - project
- Code for projecting associated types out of trait references.
- query
- Experimental types for the trait query interface. The methods
defined in this module are all based on canonicalization,
which makes a canonical query by replacing unbound inference
variables and regions, so that results can be reused more broadly.
The providers for the queries defined here can be found in
rustc_traits
. - select 🔒
- Candidate selection. See the rustc dev guide for more information on how this works.
- solve
- specialization_
graph - specialize 🔒
- Logic and data structures related to impl specialization, explained in greater detail below.
- structural_
normalize 🔒 - util 🔒
- vtable
- wf
Structs§
- Bound
VarReplacer - Derived
Cause - Derived
Host Cause - Fulfillment
Context - The fulfillment context is used to drive trait resolution. It
consists of a list of obligations that must be (eventually)
satisfied. The job is to track which are satisfied, which yielded
errors, and which are still pending. At any point, users can call
select_where_possible
, and the fulfillment context will try to do selection, retaining only those obligations that remain ambiguous. This may be helpful in pushing type inference along. Once all type inference constraints have been generated, the methodselect_all_or_error
can be used to report any remaining ambiguous cases as errors. - Fulfillment
Error - Future
Compat Overlap Error - IfExpression
Cause - Impl
Derived Cause - Impl
Derived Host Cause - Impl
Source User Defined Data - Identifies a particular impl in the source, along with a set of
generic parameters from the impl’s type/lifetime parameters. The
nested
vector corresponds to the nested obligations attached to the impl’s type parameters. - Interned
Obligation Cause Code - Match
Expression ArmCause - Mismatched
Projection Types - Normalized
- Obligation
- An
Obligation
represents some trait reference (e.g.,i32: Eq
) for which the “impl_source” must be found. The process of finding an “impl_source” is called “resolving” theObligation
. This process consists of either identifying animpl
(e.g.,impl Eq for i32
) that satisfies the obligation, or else finding a bound that is in scope. The eventual result is usually aSelection
(defined below). - Obligation
Cause - The reason why we incurred this obligation; used for error reporting.
- Obligation
Ctxt - Used if you want to have pleasant experience when dealing with obligations outside of hir or mir typeck.
- OldSolver
Error - Overlap
Error - Information pertinent to an overlapping impl error.
- Overlap
Result - Pattern
Origin Expr - Information about the origin expression of a pattern, relevant to diagnostics. Fields here refer to the scrutinee of a pattern. If the scrutinee isn’t given in the diagnostic, then this won’t exist.
- Pending
Predicate Obligation - Placeholder
Replacer - The inverse of
BoundVarReplacer
: replaces placeholders with the bound vars from which they came. - Projection
Cache - The projection cache. Unlike the standard caches, this can include infcx-dependent type variables, therefore we have to roll the cache back each time we roll a snapshot back, to avoid assumptions on yet-unresolved inference variables. Types with placeholder regions also have to be removed when the respective snapshot ends.
- Projection
Cache Key - Projection
Cache Storage - Selection
Context - Signature
Mismatch Data - Uncovered
TyParams - Unify
Receiver Context
Enums§
- Builtin
Impl Source - Codegen
Obligation Error - These are the error cases for
codegen_select_candidate
. - DynCompatibility
Violation - DynCompatibility
Violation Solution - Evaluate
Const Err - Evaluation
Result - The result of trait evaluation. The order is important here as the evaluation of a list is the maximum of the evaluations.
- Fulfillment
Error Code - Future
Compat Overlap Error Kind - Impl
Source - Given the successful resolution of an obligation, the
ImplSource
indicates where the impl comes from. - InCrate
- Whether we do the orphan check relative to this crate or to some remote crate.
- Intercrate
Ambiguity Cause - IsConstable
- Whether a value can be extracted into a const. Used for diagnostics around array repeat expressions.
- IsFirst
Input Type - Method
Violation Code - Reasons a method might not be dyn-compatible.
- Obligation
Cause Code - Orphan
Check Err - Orphan
Check Mode - Overflow
Error - Indicates that trait evaluation caused overflow and in which pass.
- Projection
Cache Entry - Scrubbed
Trait Error - A trait error with most of its information removed. This is the error
returned by an
ObligationCtxt
by default, and suitable if you just want to see if a predicate holds, and don’t particularly care about the error itself (except for if it’s an ambiguity or true error). - Selection
Error - Skip
Leak Check - Whether to skip the leak check, as part of a future compatibility warning step.
- Statement
AsExpression - Trait
Query Mode - The mode that trait queries run in.
- Well
Formed Loc - The ‘location’ at which we try to perform HIR-based wf checking.
This information is used to obtain an
hir::Ty
, which we can walk in order to obtain precise spans for any ‘nested’ types (e.g.Foo
inOption<Foo>
).
Traits§
Functions§
- add_
placeholder_ note - do_
normalize_ 🔒predicates - dyn_
compatibility_ violations_ for_ assoc_ item - Returns
Some(_)
if this item makes the containing trait dyn-incompatible. - elaborate
- evaluate_
const - Evaluates a type system constant returning a
ConstKind::Error
in cases where CTFE failed and returning the passed in constant if it was not fully concrete (i.e. depended on generic parameters or inference variables) - expand_
trait_ aliases - Return the trait and projection predicates that come from eagerly expanding the trait aliases in the list of clauses. For each trait predicate, record a stack of spans that trace from the user-written trait alias bound. For projection predicates, just record the span of the projection itself.
- hir_
ty_ lowering_ dyn_ compatibility_ violations - Returns the dyn-compatibility violations that affect HIR ty lowering.
- impl_
item_ is_ final - impossible_
predicates - Normalizes the predicates and checks whether they hold in an empty environment. If this returns true, then either normalize encountered an error or one of the predicates did not hold. Used when creating vtables to check for unsatisfiable methods. This should not be used during analysis.
- instantiate_
and_ 🔒check_ impossible_ predicates - is_
impossible_ 🔒associated_ item - Checks whether a trait’s associated item is impossible to reference on a given impl.
- is_
vtable_ safe_ method - We say a method is vtable safe if it can be invoked on a trait
object. Note that dyn-compatible traits can have some
non-vtable-safe methods, so long as they require
Self: Sized
or otherwise ensure that they cannot be used whenSelf = Trait
. - normalize_
param_ env_ or_ error - Normalizes the parameter environment, reporting errors if they occur.
- orphan_
check_ trait_ ref - Checks whether a trait-ref is potentially implementable by a crate.
- overlapping_
impls - If there are types that satisfy both impls, returns
Some
with a suitably-freshenedImplHeader
with those types instantiated. Otherwise, returnsNone
. - pred_
known_ 🔒to_ hold_ modulo_ regions - FIXME(@lcnr): this function doesn’t seem right and shouldn’t exist?
- predicates_
for_ generics - Creates predicate obligations from the generic bounds.
- provide
- replace_
param_ 🔒and_ infer_ args_ with_ placeholder - Replaces args that reference param or infer variables with suitable placeholders. This function is meant to remove these param and infer args when they’re not actually needed to evaluate a constant.
- supertrait_
def_ ids - Computes the def-ids of the transitive supertraits of
trait_def_id
. This (intentionally) does not compute the full elaborated super-predicates but just the set of def-ids. It is used to identify which traits may define a given associated type to help avoid cycle errors, and to make size estimates for vtable layout computation. - supertraits
- transitive_
bounds_ that_ define_ assoc_ item - A specialized variant of
elaborate
that only elaborates trait references that may define the given associated item with the nameassoc_name
. It uses theexplicit_supertraits_containing_assoc_item
query to avoid enumerating super-predicates that aren’t related toassoc_item
. This is used when resolving types likeSelf::Item
orT::Item
and helps to avoid cycle errors (see e.g. #35237). - translate_
args - Given the generic parameters for the requested impl, translate it to the generic parameters appropriate for the actual item definition (whether it be in that impl, a parent impl, or the trait).
- translate_
args_ with_ cause - Like translate_args, but obligations from the parent implementation
are registered with the provided
ObligationCause
. - try_
evaluate_ const - Evaluates a type system constant making sure to not allow constants that depend on generic parameters or inference variables to succeed in evaluating.
- type_
known_ to_ meet_ bound_ modulo_ regions - Determines whether the type
ty
is known to meetbound
and returns true if so. Returns false ifty
either does not meetbound
or is not known to meet bound (note that this is conservative towards no impl, which is the opposite of theevaluate
methods). - upcast_
choices - Casts a trait reference into a reference to one of its super
traits; returns
None
iftarget_trait_def_id
is not a supertrait. - with_
replaced_ escaping_ bound_ vars - Executes
f
onvalue
after replacing all escaping bound variables with placeholders and then replaces these placeholders with the original bound variables in the result.
Type Aliases§
- Evaluation
Cache - Normalized
Term - Obligation
Inspector - A callback that can be provided to
inspect_typeck
. Invoked on evaluation of root obligations. - Poly
Trait Obligation - Predicate
Obligation - Predicate
Obligations - Selection
- Selection
Cache - Selection
Result - When performing resolution, it is typically the case that there can be one of three outcomes:
- Trait
Obligation