change offset from u32 to u64
This commit is contained in:
parent
663d2f5cd3
commit
4cc2cabee2
@ -1564,10 +1564,10 @@ pub enum ProjectionElem<V, T> {
|
||||
/// ```
|
||||
ConstantIndex {
|
||||
/// index or -index (in Python terms), depending on from_end
|
||||
offset: u32,
|
||||
offset: u64,
|
||||
/// The thing being indexed must be at least this long. For arrays this
|
||||
/// is always the exact length.
|
||||
min_length: u32,
|
||||
min_length: u64,
|
||||
/// Counting backwards from end? This is always false when indexing an
|
||||
/// array.
|
||||
from_end: bool,
|
||||
@ -1578,8 +1578,8 @@ pub enum ProjectionElem<V, T> {
|
||||
/// If `from_end` is true `slice[from..slice.len() - to]`.
|
||||
/// Otherwise `array[from..to]`.
|
||||
Subslice {
|
||||
from: u32,
|
||||
to: u32,
|
||||
from: u64,
|
||||
to: u64,
|
||||
/// Whether `to` counts from the start or end of the array/slice.
|
||||
/// For `PlaceElem`s this is `true` if and only if the base is a slice.
|
||||
/// For `ProjectionKind`, this can also be `true` for arrays.
|
||||
@ -1616,7 +1616,7 @@ pub type PlaceElem<'tcx> = ProjectionElem<Local, Ty<'tcx>>;
|
||||
|
||||
// At least on 64 bit systems, `PlaceElem` should not be larger than two pointers.
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
static_assert_size!(PlaceElem<'_>, 16);
|
||||
static_assert_size!(PlaceElem<'_>, 24);
|
||||
|
||||
/// Alias for projections as they appear in `UserTypeProjection`, where we
|
||||
/// need neither the `V` parameter for `Index` nor the `T` for `Field`.
|
||||
@ -2330,7 +2330,7 @@ impl<'tcx> UserTypeProjections {
|
||||
self.map_projections(|pat_ty_proj| pat_ty_proj.index())
|
||||
}
|
||||
|
||||
pub fn subslice(self, from: u32, to: u32) -> Self {
|
||||
pub fn subslice(self, from: u64, to: u64) -> Self {
|
||||
self.map_projections(|pat_ty_proj| pat_ty_proj.subslice(from, to))
|
||||
}
|
||||
|
||||
@ -2376,7 +2376,7 @@ impl UserTypeProjection {
|
||||
self
|
||||
}
|
||||
|
||||
pub(crate) fn subslice(mut self, from: u32, to: u32) -> Self {
|
||||
pub(crate) fn subslice(mut self, from: u64, to: u64) -> Self {
|
||||
self.projs.push(ProjectionElem::Subslice { from, to, from_end: true });
|
||||
self
|
||||
}
|
||||
|
@ -1694,8 +1694,8 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||
desired_action: InitializationRequiringAction,
|
||||
place_span: (PlaceRef<'tcx>, Span),
|
||||
maybe_uninits: &BitSet<MovePathIndex>,
|
||||
from: u32,
|
||||
to: u32,
|
||||
from: u64,
|
||||
to: u64,
|
||||
) {
|
||||
if let Some(mpi) = self.move_path_for_place(place_span.0) {
|
||||
let move_paths = &self.move_data.move_paths;
|
||||
|
@ -480,7 +480,7 @@ impl<'b, 'a, 'tcx> Gatherer<'b, 'a, 'tcx> {
|
||||
}
|
||||
};
|
||||
let base_ty = base_place.ty(self.builder.body, self.builder.tcx).ty;
|
||||
let len: u32 = match base_ty.kind {
|
||||
let len: u64 = match base_ty.kind {
|
||||
ty::Array(_, size) => {
|
||||
let length = size.eval_usize(self.builder.tcx, self.builder.param_env);
|
||||
length
|
||||
|
@ -295,7 +295,7 @@ impl<'a, 'tcx> DropElaborator<'a, 'tcx> for DropShimElaborator<'a, 'tcx> {
|
||||
fn downcast_subpath(&self, _path: Self::Path, _variant: VariantIdx) -> Option<Self::Path> {
|
||||
Some(())
|
||||
}
|
||||
fn array_subpath(&self, _path: Self::Path, _index: u32, _size: u32) -> Option<Self::Path> {
|
||||
fn array_subpath(&self, _path: Self::Path, _index: u64, _size: u64) -> Option<Self::Path> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
@ -219,7 +219,7 @@ impl<'a, 'b, 'tcx> DropElaborator<'a, 'tcx> for Elaborator<'a, 'b, 'tcx> {
|
||||
})
|
||||
}
|
||||
|
||||
fn array_subpath(&self, path: Self::Path, index: u32, size: u32) -> Option<Self::Path> {
|
||||
fn array_subpath(&self, path: Self::Path, index: u64, size: u64) -> Option<Self::Path> {
|
||||
dataflow::move_path_children_matching(self.ctxt.move_data(), path, |e| match e {
|
||||
ProjectionElem::ConstantIndex { offset, min_length, from_end } => {
|
||||
debug_assert!(size == min_length, "min_length should be exact for arrays");
|
||||
|
@ -52,14 +52,12 @@ pub fn expand_aggregate<'tcx>(
|
||||
.enumerate()
|
||||
.map(move |(i, (op, ty))| {
|
||||
let lhs_field = if let AggregateKind::Array(_) = kind {
|
||||
// FIXME(eddyb) `offset` should be u64.
|
||||
let offset = i as u32;
|
||||
let offset = i as u64;
|
||||
assert_eq!(offset as usize, i);
|
||||
tcx.mk_place_elem(
|
||||
lhs,
|
||||
ProjectionElem::ConstantIndex {
|
||||
offset,
|
||||
// FIXME(eddyb) `min_length` doesn't appear to be used.
|
||||
min_length: offset + 1,
|
||||
from_end: false,
|
||||
},
|
||||
|
@ -150,7 +150,7 @@ pub trait DropElaborator<'a, 'tcx>: fmt::Debug {
|
||||
/// If this returns `None`, elements of `path` will not get a dedicated drop flag.
|
||||
///
|
||||
/// This is only relevant for array patterns, which can move out of individual array elements.
|
||||
fn array_subpath(&self, path: Self::Path, index: u32, size: u32) -> Option<Self::Path>;
|
||||
fn array_subpath(&self, path: Self::Path, index: u64, size: u64) -> Option<Self::Path>;
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
@ -744,8 +744,8 @@ where
|
||||
let tcx = self.tcx();
|
||||
|
||||
if let Some(size) = opt_size {
|
||||
let size: u32 = size.try_into().unwrap_or_else(|_| {
|
||||
bug!("move out check isn't implemented for array sizes bigger than u32::MAX");
|
||||
let size: u64 = size.try_into().unwrap_or_else(|_| {
|
||||
bug!("move out check isn't implemented for array sizes bigger than u64::MAX");
|
||||
});
|
||||
let fields: Vec<(Place<'tcx>, Option<D::Path>)> = (0..size)
|
||||
.map(|i| {
|
||||
|
@ -609,8 +609,8 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
|
||||
PatKind::Array { ref prefix, ref slice, ref suffix }
|
||||
| PatKind::Slice { ref prefix, ref slice, ref suffix } => {
|
||||
let from = u32::try_from(prefix.len()).unwrap();
|
||||
let to = u32::try_from(suffix.len()).unwrap();
|
||||
let from = u64::try_from(prefix.len()).unwrap();
|
||||
let to = u64::try_from(suffix.len()).unwrap();
|
||||
for subpattern in prefix {
|
||||
self.visit_primary_bindings(subpattern, pattern_user_ty.clone().index(), f);
|
||||
}
|
||||
|
@ -40,17 +40,17 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
|
||||
match_pairs.extend(prefix.iter().enumerate().map(|(idx, subpattern)| {
|
||||
let elem =
|
||||
ProjectionElem::ConstantIndex { offset: idx as u32, min_length, from_end: false };
|
||||
ProjectionElem::ConstantIndex { offset: idx as u64, min_length, from_end: false };
|
||||
let place = tcx.mk_place_elem(*place, elem);
|
||||
MatchPair::new(place, subpattern)
|
||||
}));
|
||||
|
||||
if let Some(subslice_pat) = opt_slice {
|
||||
let suffix_len = suffix.len() as u32;
|
||||
let suffix_len = suffix.len() as u64;
|
||||
let subslice = tcx.mk_place_elem(
|
||||
*place,
|
||||
ProjectionElem::Subslice {
|
||||
from: prefix.len() as u32,
|
||||
from: prefix.len() as u64,
|
||||
to: if exact_size { min_length - suffix_len } else { suffix_len },
|
||||
from_end: !exact_size,
|
||||
},
|
||||
@ -59,7 +59,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
}
|
||||
|
||||
match_pairs.extend(suffix.iter().rev().enumerate().map(|(idx, subpattern)| {
|
||||
let end_offset = (idx + 1) as u32;
|
||||
let end_offset = (idx + 1) as u64;
|
||||
let elem = ProjectionElem::ConstantIndex {
|
||||
offset: if exact_size { min_length - end_offset } else { end_offset },
|
||||
min_length,
|
||||
|
Loading…
x
Reference in New Issue
Block a user