Add a new set of predicates to the caller_bounds of an existing param_env.
Checks all associated type defaults of trait trait_def_id.
Require that the user writes where clauses on GATs for the implicit
outlives bounds involving trait parameters in trait functions and
lifetimes passed as GAT args. See self-outlives-lint test.
Checks that the field types (in a struct defβn) or argument types (in an enum defβn) are
well-formed, meaning that they do not require any constraints not declared in the struct
definition itself. For example, this definition would be illegal:
Detect when an object unsafe trait is referring to itself in one of its associated items.
When this is done, suggest using Self instead.
In a type definition, we check that to ensure that the types of the fields are well-formed.
Checks where-clauses and inline bounds that are declared on def_id.
We use the following trait as an example throughout this function.
Specifically, letβs assume that to_check here is the return type
of into_iter, and the GAT we are checking this for is Iter.
Returns whether receiver_ty would be considered a valid receiver type for self_ty. If
arbitrary_self_types is enabled, receiver_ty must transitively deref to self_ty, possibly
through a *const/mut T raw pointer. If the feature is not enabled, the requirements are more
strict: receiver_ty must implement Receiver and directly implement
Deref<Target = self_ty>.
Given a known param_env and a set of well formed types, can we prove that
region_a outlives region_b
Given a known param_env and a set of well formed types, set up an
InferCtxt, call the passed function (to e.g. set up region constraints
to be tested), then resolve region and return errors
Given a known param_env and a set of well formed types, can we prove that
ty outlives region.