-
Notifications
You must be signed in to change notification settings - Fork 13.3k
change offset from u32 to u64 #71696
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1807,7 +1807,7 @@ 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, | ||
|
@@ -1821,8 +1821,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. | ||
|
@@ -1861,7 +1861,7 @@ impl<'tcx> Copy for PlaceElem<'tcx> {} | |
|
||
// At least on 64 bit systems, `PlaceElem` should not be larger than two pointers. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This PR seems to make this comment out of date? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm changing it, I haven't pushed it yet |
||
#[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`. | ||
|
@@ -2496,7 +2496,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)) | ||
} | ||
|
||
|
@@ -2542,7 +2542,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 | ||
} | ||
|
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -645,7 +645,7 @@ impl<'a, 'b, 'tcx> TypeVerifier<'a, 'b, 'tcx> { | |||||
PlaceTy::from_ty(match base_ty.kind { | ||||||
ty::Array(inner, _) => { | ||||||
assert!(!from_end, "array subslices should not use from_end"); | ||||||
tcx.mk_array(inner, (to - from) as u64) | ||||||
tcx.mk_array(inner, (to - from)) | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unnecessary parens. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
} | ||||||
ty::Slice(..) => { | ||||||
assert!(from_end, "slice subslices should use from_end"); | ||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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); | ||
Comment on lines
+55
to
56
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. AFAIK this dance isn't needed anymore, since There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd use I changed |
||
tcx.mk_place_elem( | ||
lhs, | ||
ProjectionElem::ConstantIndex { | ||
offset, | ||
// FIXME(eddyb) `min_length` doesn't appear to be used. | ||
oli-obk marked this conversation as resolved.
Show resolved
Hide resolved
|
||
min_length: offset + 1, | ||
from_end: false, | ||
}, | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you can now also remove a bunch of conversions around here:
rust/src/librustc_mir/interpret/place.rs
Line 541 in bd0bacc