Struct rustc_middle::ty::layout::LayoutCx
source · pub struct LayoutCx<'tcx, C> {
pub tcx: C,
pub param_env: ParamEnv<'tcx>,
}
Fields§
§tcx: C
§param_env: ParamEnv<'tcx>
Trait Implementations§
source§impl<'tcx, T: HasDataLayout> HasDataLayout for LayoutCx<'tcx, T>
impl<'tcx, T: HasDataLayout> HasDataLayout for LayoutCx<'tcx, T>
fn data_layout(&self) -> &TargetDataLayout
source§impl<'tcx, C> HasParamEnv<'tcx> for LayoutCx<'tcx, C>
impl<'tcx, C> HasParamEnv<'tcx> for LayoutCx<'tcx, C>
source§impl<'tcx, T: HasTargetSpec> HasTargetSpec for LayoutCx<'tcx, T>
impl<'tcx, T: HasTargetSpec> HasTargetSpec for LayoutCx<'tcx, T>
fn target_spec(&self) -> &Target
source§impl<'tcx> LayoutCalculator for LayoutCx<'tcx, TyCtxt<'tcx>>
impl<'tcx> LayoutCalculator for LayoutCx<'tcx, TyCtxt<'tcx>>
type TargetDataLayoutRef = &'tcx TargetDataLayout
fn delay_bug(&self, txt: String)
fn current_data_layout(&self) -> Self::TargetDataLayoutRef
fn scalar_pair<FieldIdx, VariantIdx>( &self, a: Scalar, b: Scalar ) -> LayoutS<FieldIdx, VariantIdx>where FieldIdx: Idx, VariantIdx: Idx,
fn univariant<'a, FieldIdx, VariantIdx, F>( &self, dl: &TargetDataLayout, fields: &IndexSlice<FieldIdx, F>, repr: &ReprOptions, kind: StructKind ) -> Option<LayoutS<FieldIdx, VariantIdx>>where FieldIdx: Idx, VariantIdx: Idx, F: Deref<Target = &'a LayoutS<FieldIdx, VariantIdx>> + Debug,
fn layout_of_never_type<FieldIdx, VariantIdx>( &self ) -> LayoutS<FieldIdx, VariantIdx>where FieldIdx: Idx, VariantIdx: Idx,
fn layout_of_struct_or_enum<'a, FieldIdx, VariantIdx, F>( &self, repr: &ReprOptions, variants: &IndexSlice<VariantIdx, IndexVec<FieldIdx, F>>, is_enum: bool, is_unsafe_cell: bool, scalar_valid_range: (Bound<u128>, Bound<u128>), discr_range_of_repr: impl Fn(i128, i128) -> (Integer, bool), discriminants: impl Iterator<Item = (VariantIdx, i128)>, dont_niche_optimize_enum: bool, always_sized: bool ) -> Option<LayoutS<FieldIdx, VariantIdx>>where FieldIdx: Idx, VariantIdx: Idx, F: Deref<Target = &'a LayoutS<FieldIdx, VariantIdx>> + Debug,
fn layout_of_union<'a, FieldIdx, VariantIdx, F>( &self, repr: &ReprOptions, variants: &IndexSlice<VariantIdx, IndexVec<FieldIdx, F>> ) -> Option<LayoutS<FieldIdx, VariantIdx>>where FieldIdx: Idx, VariantIdx: Idx, F: Deref<Target = &'a LayoutS<FieldIdx, VariantIdx>> + Debug,
source§impl<'tcx> LayoutOfHelpers<'tcx> for LayoutCx<'tcx, TyCtxt<'tcx>>
impl<'tcx> LayoutOfHelpers<'tcx> for LayoutCx<'tcx, TyCtxt<'tcx>>
§type LayoutOfResult = Result<TyAndLayout<'tcx, Ty<'tcx>>, &'tcx LayoutError<'tcx>>
type LayoutOfResult = Result<TyAndLayout<'tcx, Ty<'tcx>>, &'tcx LayoutError<'tcx>>
The
TyAndLayout
-wrapping type (or TyAndLayout
itself), which will be
returned from layout_of
(see also handle_layout_err
).source§fn handle_layout_err(
&self,
err: LayoutError<'tcx>,
_: Span,
_: Ty<'tcx>
) -> &'tcx LayoutError<'tcx>
fn handle_layout_err( &self, err: LayoutError<'tcx>, _: Span, _: Ty<'tcx> ) -> &'tcx LayoutError<'tcx>
Helper used for
layout_of
, to adapt tcx.layout_of(...)
into a
Self::LayoutOfResult
(which does not need to be a Result<...>
). Read moresource§fn layout_tcx_at_span(&self) -> Span
fn layout_tcx_at_span(&self) -> Span
Span
to use for tcx.at(span)
, from layout_of
.source§impl<'tcx> LayoutOfHelpers<'tcx> for LayoutCx<'tcx, TyCtxtAt<'tcx>>
impl<'tcx> LayoutOfHelpers<'tcx> for LayoutCx<'tcx, TyCtxtAt<'tcx>>
§type LayoutOfResult = Result<TyAndLayout<'tcx, Ty<'tcx>>, &'tcx LayoutError<'tcx>>
type LayoutOfResult = Result<TyAndLayout<'tcx, Ty<'tcx>>, &'tcx LayoutError<'tcx>>
The
TyAndLayout
-wrapping type (or TyAndLayout
itself), which will be
returned from layout_of
(see also handle_layout_err
).source§fn layout_tcx_at_span(&self) -> Span
fn layout_tcx_at_span(&self) -> Span
Span
to use for tcx.at(span)
, from layout_of
.source§fn handle_layout_err(
&self,
err: LayoutError<'tcx>,
_: Span,
_: Ty<'tcx>
) -> &'tcx LayoutError<'tcx>
fn handle_layout_err( &self, err: LayoutError<'tcx>, _: Span, _: Ty<'tcx> ) -> &'tcx LayoutError<'tcx>
Helper used for
layout_of
, to adapt tcx.layout_of(...)
into a
Self::LayoutOfResult
(which does not need to be a Result<...>
). Read moreimpl<'tcx, C: Copy> Copy for LayoutCx<'tcx, C>
Auto Trait Implementations§
impl<'tcx, C> !RefUnwindSafe for LayoutCx<'tcx, C>
impl<'tcx, C> Send for LayoutCx<'tcx, C>where C: Send,
impl<'tcx, C> Sync for LayoutCx<'tcx, C>where C: Sync,
impl<'tcx, C> Unpin for LayoutCx<'tcx, C>where C: Unpin,
impl<'tcx, C> !UnwindSafe for LayoutCx<'tcx, C>
Blanket Implementations§
source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere T: Copy,
fn allocate_on<'a>(self, arena: &'a Arena<'tcx>) -> &'a mut T
fn allocate_from_iter<'a>( arena: &'a Arena<'tcx>, iter: impl IntoIterator<Item = T> ) -> &'a mut [T]
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
source§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
source§impl<'tcx, C> LayoutOf<'tcx> for Cwhere
C: LayoutOfHelpers<'tcx>,
impl<'tcx, C> LayoutOf<'tcx> for Cwhere C: LayoutOfHelpers<'tcx>,
source§fn layout_of(&self, ty: Ty<'tcx>) -> Self::LayoutOfResult
fn layout_of(&self, ty: Ty<'tcx>) -> Self::LayoutOfResult
Computes the layout of a type. Note that this implicitly
executes in “reveal all” mode, and will normalize the input type.
source§fn spanned_layout_of(&self, ty: Ty<'tcx>, span: Span) -> Self::LayoutOfResult
fn spanned_layout_of(&self, ty: Ty<'tcx>, span: Span) -> Self::LayoutOfResult
Computes the layout of a type, at
span
. Note that this implicitly
executes in “reveal all” mode, and will normalize the input type.source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
source§impl<T> PointerArithmetic for Twhere
T: HasDataLayout,
impl<T> PointerArithmetic for Twhere T: HasDataLayout,
fn pointer_size(&self) -> Size
fn max_size_of_val(&self) -> Size
fn target_usize_max(&self) -> u64
fn target_isize_min(&self) -> i64
fn target_isize_max(&self) -> i64
fn target_usize_to_isize(&self, val: u64) -> i64
source§fn truncate_to_ptr(&self, (val, over): (u64, bool)) -> (u64, bool)
fn truncate_to_ptr(&self, (val, over): (u64, bool)) -> (u64, bool)
Helper function: truncate given value-“overflowed flag” pair to pointer size and
update “overflowed flag” if there was an overflow.
This should be called by all the other methods before returning!
fn overflowing_offset(&self, val: u64, i: u64) -> (u64, bool)
fn overflowing_signed_offset(&self, val: u64, i: i64) -> (u64, bool)
fn offset<'tcx>(&self, val: u64, i: u64) -> InterpResult<'tcx, u64>
fn signed_offset<'tcx>(&self, val: u64, i: i64) -> InterpResult<'tcx, u64>
source§impl<'tcx, T> ToPredicate<'tcx, T> for T
impl<'tcx, T> ToPredicate<'tcx, T> for T
fn to_predicate(self, _tcx: TyCtxt<'tcx>) -> T
source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle: &[QueryInfo], _guar: ErrorGuaranteed ) -> T
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.