Shrink the size of ClosureTypeInfo to fit into 64 bytes again
This commit is contained in:
parent
2f2350e577
commit
ba5f0418af
@ -338,7 +338,8 @@ macro_rules! define_callbacks {
|
|||||||
|
|
||||||
pub type Storage<'tcx> = <$($K)* as keys::Key>::Cache<Erase<$V>>;
|
pub type Storage<'tcx> = <$($K)* as keys::Key>::Cache<Erase<$V>>;
|
||||||
|
|
||||||
// Ensure that keys grow no larger than 72 bytes
|
// Ensure that keys grow no larger than 72 bytes by accident.
|
||||||
|
// Increase this limit if necessary, but do try to keep the size low if possible
|
||||||
#[cfg(all(any(target_arch = "x86_64", target_arch="aarch64"), target_pointer_width = "64"))]
|
#[cfg(all(any(target_arch = "x86_64", target_arch="aarch64"), target_pointer_width = "64"))]
|
||||||
const _: () = {
|
const _: () = {
|
||||||
if mem::size_of::<Key<'static>>() > 72 {
|
if mem::size_of::<Key<'static>>() > 72 {
|
||||||
@ -352,10 +353,11 @@ macro_rules! define_callbacks {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Ensure that values grow no larger than 72 bytes
|
// Ensure that values grow no larger than 64 bytes by accident.
|
||||||
|
// Increase this limit if necessary, but do try to keep the size low if possible
|
||||||
#[cfg(all(any(target_arch = "x86_64", target_arch="aarch64"), target_pointer_width = "64"))]
|
#[cfg(all(any(target_arch = "x86_64", target_arch="aarch64"), target_pointer_width = "64"))]
|
||||||
const _: () = {
|
const _: () = {
|
||||||
if mem::size_of::<Value<'static>>() > 72 {
|
if mem::size_of::<Value<'static>>() > 64 {
|
||||||
panic!("{}", concat!(
|
panic!("{}", concat!(
|
||||||
"the query `",
|
"the query `",
|
||||||
stringify!($name),
|
stringify!($name),
|
||||||
|
@ -45,7 +45,7 @@ impl UpvarId {
|
|||||||
|
|
||||||
/// Information describing the capture of an upvar. This is computed
|
/// Information describing the capture of an upvar. This is computed
|
||||||
/// during `typeck`, specifically by `regionck`.
|
/// during `typeck`, specifically by `regionck`.
|
||||||
#[derive(PartialEq, Clone, Debug, Copy, TyEncodable, TyDecodable, HashStable)]
|
#[derive(Eq, PartialEq, Clone, Debug, Copy, TyEncodable, TyDecodable, HashStable, Hash)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
#[derive(TypeFoldable, TypeVisitable)]
|
||||||
pub enum UpvarCapture {
|
pub enum UpvarCapture {
|
||||||
/// Upvar is captured by value. This is always true when the
|
/// Upvar is captured by value. This is always true when the
|
||||||
@ -73,7 +73,7 @@ pub type RootVariableMinCaptureList<'tcx> = FxIndexMap<hir::HirId, MinCaptureLis
|
|||||||
pub type MinCaptureList<'tcx> = Vec<CapturedPlace<'tcx>>;
|
pub type MinCaptureList<'tcx> = Vec<CapturedPlace<'tcx>>;
|
||||||
|
|
||||||
/// A composite describing a `Place` that is captured by a closure.
|
/// A composite describing a `Place` that is captured by a closure.
|
||||||
#[derive(PartialEq, Clone, Debug, TyEncodable, TyDecodable, HashStable)]
|
#[derive(Eq, PartialEq, Clone, Debug, TyEncodable, TyDecodable, HashStable, Hash)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
#[derive(TypeFoldable, TypeVisitable)]
|
||||||
pub struct CapturedPlace<'tcx> {
|
pub struct CapturedPlace<'tcx> {
|
||||||
/// Name and span where the binding happens.
|
/// Name and span where the binding happens.
|
||||||
@ -192,7 +192,7 @@ impl<'tcx> CapturedPlace<'tcx> {
|
|||||||
#[derive(Copy, Clone, Debug, HashStable)]
|
#[derive(Copy, Clone, Debug, HashStable)]
|
||||||
pub struct ClosureTypeInfo<'tcx> {
|
pub struct ClosureTypeInfo<'tcx> {
|
||||||
user_provided_sig: ty::CanonicalPolyFnSig<'tcx>,
|
user_provided_sig: ty::CanonicalPolyFnSig<'tcx>,
|
||||||
captures: &'tcx [&'tcx ty::CapturedPlace<'tcx>],
|
captures: &'tcx ty::List<&'tcx ty::CapturedPlace<'tcx>>,
|
||||||
kind_origin: Option<&'tcx (Span, HirPlace<'tcx>)>,
|
kind_origin: Option<&'tcx (Span, HirPlace<'tcx>)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,7 +201,7 @@ fn closure_typeinfo<'tcx>(tcx: TyCtxt<'tcx>, def: LocalDefId) -> ClosureTypeInfo
|
|||||||
let typeck_results = tcx.typeck(def);
|
let typeck_results = tcx.typeck(def);
|
||||||
let user_provided_sig = typeck_results.user_provided_sigs[&def];
|
let user_provided_sig = typeck_results.user_provided_sigs[&def];
|
||||||
let captures = typeck_results.closure_min_captures_flattened(def);
|
let captures = typeck_results.closure_min_captures_flattened(def);
|
||||||
let captures = tcx.arena.alloc_from_iter(captures);
|
let captures = tcx.mk_captures_from_iter(captures);
|
||||||
let hir_id = tcx.local_def_id_to_hir_id(def);
|
let hir_id = tcx.local_def_id_to_hir_id(def);
|
||||||
let kind_origin = typeck_results.closure_kind_origins().get(hir_id);
|
let kind_origin = typeck_results.closure_kind_origins().get(hir_id);
|
||||||
ClosureTypeInfo { user_provided_sig, captures, kind_origin }
|
ClosureTypeInfo { user_provided_sig, captures, kind_origin }
|
||||||
@ -253,7 +253,7 @@ pub fn is_ancestor_or_same_capture(
|
|||||||
/// Part of `MinCaptureInformationMap`; describes the capture kind (&, &mut, move)
|
/// Part of `MinCaptureInformationMap`; describes the capture kind (&, &mut, move)
|
||||||
/// for a particular capture as well as identifying the part of the source code
|
/// for a particular capture as well as identifying the part of the source code
|
||||||
/// that triggered this capture to occur.
|
/// that triggered this capture to occur.
|
||||||
#[derive(PartialEq, Clone, Debug, Copy, TyEncodable, TyDecodable, HashStable)]
|
#[derive(Eq, PartialEq, Clone, Debug, Copy, TyEncodable, TyDecodable, HashStable, Hash)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
#[derive(TypeFoldable, TypeVisitable)]
|
||||||
pub struct CaptureInfo {
|
pub struct CaptureInfo {
|
||||||
/// Expr Id pointing to use that resulted in selecting the current capture kind
|
/// Expr Id pointing to use that resulted in selecting the current capture kind
|
||||||
@ -332,7 +332,7 @@ pub fn place_to_string_for_capture<'tcx>(tcx: TyCtxt<'tcx>, place: &HirPlace<'tc
|
|||||||
curr_string
|
curr_string
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, PartialEq, Debug, TyEncodable, TyDecodable, Copy, HashStable)]
|
#[derive(Eq, Clone, PartialEq, Debug, TyEncodable, TyDecodable, Copy, HashStable, Hash)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
#[derive(TypeFoldable, TypeVisitable)]
|
||||||
pub enum BorrowKind {
|
pub enum BorrowKind {
|
||||||
/// Data must be immutable and is aliasable.
|
/// Data must be immutable and is aliasable.
|
||||||
|
@ -166,6 +166,7 @@ pub struct CtxtInterners<'tcx> {
|
|||||||
predefined_opaques_in_body: InternedSet<'tcx, PredefinedOpaquesData<'tcx>>,
|
predefined_opaques_in_body: InternedSet<'tcx, PredefinedOpaquesData<'tcx>>,
|
||||||
fields: InternedSet<'tcx, List<FieldIdx>>,
|
fields: InternedSet<'tcx, List<FieldIdx>>,
|
||||||
local_def_ids: InternedSet<'tcx, List<LocalDefId>>,
|
local_def_ids: InternedSet<'tcx, List<LocalDefId>>,
|
||||||
|
captures: InternedSet<'tcx, List<&'tcx ty::CapturedPlace<'tcx>>>,
|
||||||
offset_of: InternedSet<'tcx, List<(VariantIdx, FieldIdx)>>,
|
offset_of: InternedSet<'tcx, List<(VariantIdx, FieldIdx)>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,6 +194,7 @@ impl<'tcx> CtxtInterners<'tcx> {
|
|||||||
predefined_opaques_in_body: Default::default(),
|
predefined_opaques_in_body: Default::default(),
|
||||||
fields: Default::default(),
|
fields: Default::default(),
|
||||||
local_def_ids: Default::default(),
|
local_def_ids: Default::default(),
|
||||||
|
captures: Default::default(),
|
||||||
offset_of: Default::default(),
|
offset_of: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1906,6 +1908,7 @@ slice_interners!(
|
|||||||
bound_variable_kinds: pub mk_bound_variable_kinds(ty::BoundVariableKind),
|
bound_variable_kinds: pub mk_bound_variable_kinds(ty::BoundVariableKind),
|
||||||
fields: pub mk_fields(FieldIdx),
|
fields: pub mk_fields(FieldIdx),
|
||||||
local_def_ids: intern_local_def_ids(LocalDefId),
|
local_def_ids: intern_local_def_ids(LocalDefId),
|
||||||
|
captures: intern_captures(&'tcx ty::CapturedPlace<'tcx>),
|
||||||
offset_of: pub mk_offset_of((VariantIdx, FieldIdx)),
|
offset_of: pub mk_offset_of((VariantIdx, FieldIdx)),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -2227,6 +2230,17 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||||||
T::collect_and_apply(iter, |xs| self.mk_local_def_ids(xs))
|
T::collect_and_apply(iter, |xs| self.mk_local_def_ids(xs))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn mk_captures_from_iter<I, T>(self, iter: I) -> T::Output
|
||||||
|
where
|
||||||
|
I: Iterator<Item = T>,
|
||||||
|
T: CollectAndApply<
|
||||||
|
&'tcx ty::CapturedPlace<'tcx>,
|
||||||
|
&'tcx List<&'tcx ty::CapturedPlace<'tcx>>,
|
||||||
|
>,
|
||||||
|
{
|
||||||
|
T::collect_and_apply(iter, |xs| self.intern_captures(xs))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn mk_const_list_from_iter<I, T>(self, iter: I) -> T::Output
|
pub fn mk_const_list_from_iter<I, T>(self, iter: I) -> T::Output
|
||||||
where
|
where
|
||||||
I: Iterator<Item = T>,
|
I: Iterator<Item = T>,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user