Module rustc_trait_selection::infer

source ·


  • A nice interface for working with the infcx. The basic idea is to do, param_env), which sets the “cause” of the operation as well as the surrounding parameter environment. Then you can do something like .sub(a, b) or .eq(a, b) to create a subtype or equality relationship respectively. The first argument is always the “expected” output from the POV of diagnostics.
  • Canonicalization is the key to constructing a query in the middle of type inference. Ordinarily, it is not possible to store types from type inference in query keys, because they contain references to inference variables whose lifetimes are too short and so forth. Canonicalizing a value T1 using canonicalize_query produces two things:
  • This module handles the relationships between “free regions”, i.e., lifetime parameters. Ordinarily, free regions are unrelated to one another, but they can be related via implied or explicit bounds. In that case, we track the bounds using the TransitiveRelation type, and use that to decide when one free region outlives another, and so forth.
  • Various code related to computing outlives relations.
  • See
  • This module contains the definitions of most TypeRelations in the type system (except for some relations used for diagnostics and heuristics in the compiler). As well as the implementation of Relate for interned things (Ty/Const/etc).


  • Used to configure inference contexts before their creation.
  • This type contains all the things within InferCtxt that sit within a RefCell and are involved with taking/rolling back snapshots. Snapshot operations are hot enough that we want only one call to borrow_mut per call to start_snapshot and rollback_to.
  • See the region_obligations field for more information.
  • The trace designates the path through inference that we took to encounter an error or subtyping constraint.



Type Aliases§

Derive Macros§

  • Derives TypeFoldable for the annotated struct or enum (union is not supported).
  • Derives TypeVisitable for the annotated struct or enum (union is not supported).