pub type RegionKind<'tcx> = RegionKind<TyCtxt<'tcx>>;
Aliased Type§
enum RegionKind<'tcx> {
ReEarlyParam(EarlyParamRegion),
ReBound(DebruijnIndex, BoundRegion),
ReLateParam(LateParamRegion),
ReStatic,
ReVar(RegionVid),
RePlaceholder(Placeholder<BoundRegion>),
ReErased,
ReError(ErrorGuaranteed),
}
Variants§
ReEarlyParam(EarlyParamRegion)
A region parameter; for example 'a
in impl<'a> Trait for &'a ()
.
There are some important differences between region and type parameters.
Not all region parameters in the source are represented via ReEarlyParam
:
late-bound function parameters are instead lowered to a ReBound
. Late-bound
regions get eagerly replaced with ReLateParam
which behaves in the same way as
ReEarlyParam
. Region parameters are also sometimes implicit,
e.g. in impl Trait for &()
.
ReBound(DebruijnIndex, BoundRegion)
A higher-ranked region. These represent either late-bound function parameters
or bound variables from a for<'a>
-binder.
While inside of a function, e.g. during typeck, the late-bound function parameters
can be converted to ReLateParam
by calling tcx.liberate_late_bound_regions
.
Bound regions inside of types must not be erased, as they impact trait
selection and the TypeId
of that type. for<'a> fn(&'a ())
and
fn(&'static ())
are different types and have to be treated as such.
ReLateParam(LateParamRegion)
Late-bound function parameters are represented using a ReBound
. When
inside of a function, we convert these bound variables to placeholder
parameters via tcx.liberate_late_bound_regions
. They are then treated
the same way as ReEarlyParam
while inside of the function.
See https://rustc-dev-guide.rust-lang.org/early-late-bound-params/early-late-bound-summary.html for more info about early and late bound lifetime parameters.
ReStatic
Static data that has an “infinite” lifetime. Top in the region lattice.
ReVar(RegionVid)
A region variable. Should not exist outside of type inference.
RePlaceholder(Placeholder<BoundRegion>)
A placeholder region – the higher-ranked version of ReLateParam
.
Should not exist outside of type inference.
Used when instantiating a forall
binder via infcx.enter_forall
.
ReErased
Erased region, used by trait selection, in MIR and during codegen.
ReError(ErrorGuaranteed)
A region that resulted from some other error. Used exclusively for diagnostics.
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 24 bytes
Size for each variant:
ReEarlyParam
: 8 bytesReBound
: 20 bytesReLateParam
: 20 bytesReStatic
: 0 bytesReVar
: 4 bytesRePlaceholder
: 20 bytesReErased
: 0 bytesReError
: 0 bytes