Skip to content

Commit 00db13f

Browse files
authored
Rollup merge of #101412 - WaffleLapkin:improve_std_ptr_code_leftovers, r=scottmcm
Some more cleanup in `core` - remove some integer casts from slice iter (proposed in #100819 (comment)) - replace `as usize` casts with `usize::from` in slice sort (proposed in #100822 (comment)) r? `@scottmcm`
2 parents 24f9989 + 5a67292 commit 00db13f

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

library/core/src/slice/iter/macros.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ macro_rules! iterator {
6464
// backwards by `n`. `n` must not exceed `self.len()`.
6565
macro_rules! zst_shrink {
6666
($self: ident, $n: ident) => {
67-
$self.end = $self.end.wrapping_byte_offset(-$n);
67+
$self.end = $self.end.wrapping_byte_sub($n);
6868
}
6969
}
7070

@@ -82,15 +82,15 @@ macro_rules! iterator {
8282
// returning the old start.
8383
// Unsafe because the offset must not exceed `self.len()`.
8484
#[inline(always)]
85-
unsafe fn post_inc_start(&mut self, offset: isize) -> * $raw_mut T {
85+
unsafe fn post_inc_start(&mut self, offset: usize) -> * $raw_mut T {
8686
if mem::size_of::<T>() == 0 {
8787
zst_shrink!(self, offset);
8888
self.ptr.as_ptr()
8989
} else {
9090
let old = self.ptr.as_ptr();
9191
// SAFETY: the caller guarantees that `offset` doesn't exceed `self.len()`,
9292
// so this new pointer is inside `self` and thus guaranteed to be non-null.
93-
self.ptr = unsafe { NonNull::new_unchecked(self.ptr.as_ptr().offset(offset)) };
93+
self.ptr = unsafe { NonNull::new_unchecked(self.ptr.as_ptr().add(offset)) };
9494
old
9595
}
9696
}
@@ -99,15 +99,15 @@ macro_rules! iterator {
9999
// returning the new end.
100100
// Unsafe because the offset must not exceed `self.len()`.
101101
#[inline(always)]
102-
unsafe fn pre_dec_end(&mut self, offset: isize) -> * $raw_mut T {
102+
unsafe fn pre_dec_end(&mut self, offset: usize) -> * $raw_mut T {
103103
if mem::size_of::<T>() == 0 {
104104
zst_shrink!(self, offset);
105105
self.ptr.as_ptr()
106106
} else {
107107
// SAFETY: the caller guarantees that `offset` doesn't exceed `self.len()`,
108108
// which is guaranteed to not overflow an `isize`. Also, the resulting pointer
109109
// is in bounds of `slice`, which fulfills the other requirements for `offset`.
110-
self.end = unsafe { self.end.offset(-offset) };
110+
self.end = unsafe { self.end.sub(offset) };
111111
self.end
112112
}
113113
}
@@ -180,7 +180,7 @@ macro_rules! iterator {
180180
}
181181
// SAFETY: We are in bounds. `post_inc_start` does the right thing even for ZSTs.
182182
unsafe {
183-
self.post_inc_start(n as isize);
183+
self.post_inc_start(n);
184184
Some(next_unchecked!(self))
185185
}
186186
}
@@ -189,7 +189,7 @@ macro_rules! iterator {
189189
fn advance_by(&mut self, n: usize) -> Result<(), usize> {
190190
let advance = cmp::min(len!(self), n);
191191
// SAFETY: By construction, `advance` does not exceed `self.len()`.
192-
unsafe { self.post_inc_start(advance as isize) };
192+
unsafe { self.post_inc_start(advance) };
193193
if advance == n { Ok(()) } else { Err(advance) }
194194
}
195195

@@ -375,7 +375,7 @@ macro_rules! iterator {
375375
}
376376
// SAFETY: We are in bounds. `pre_dec_end` does the right thing even for ZSTs.
377377
unsafe {
378-
self.pre_dec_end(n as isize);
378+
self.pre_dec_end(n);
379379
Some(next_back_unchecked!(self))
380380
}
381381
}
@@ -384,7 +384,7 @@ macro_rules! iterator {
384384
fn advance_back_by(&mut self, n: usize) -> Result<(), usize> {
385385
let advance = cmp::min(len!(self), n);
386386
// SAFETY: By construction, `advance` does not exceed `self.len()`.
387-
unsafe { self.pre_dec_end(advance as isize) };
387+
unsafe { self.pre_dec_end(advance) };
388388
if advance == n { Ok(()) } else { Err(advance) }
389389
}
390390
}

library/core/src/slice/sort.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -365,12 +365,12 @@ where
365365
if count > 0 {
366366
macro_rules! left {
367367
() => {
368-
l.add(*start_l as usize)
368+
l.add(usize::from(*start_l))
369369
};
370370
}
371371
macro_rules! right {
372372
() => {
373-
r.sub((*start_r as usize) + 1)
373+
r.sub(usize::from(*start_r) + 1)
374374
};
375375
}
376376

@@ -458,7 +458,7 @@ where
458458
// the last block, so the `l.offset` calls are valid.
459459
unsafe {
460460
end_l = end_l.sub(1);
461-
ptr::swap(l.add(*end_l as usize), r.sub(1));
461+
ptr::swap(l.add(usize::from(*end_l)), r.sub(1));
462462
r = r.sub(1);
463463
}
464464
}
@@ -471,7 +471,7 @@ where
471471
// SAFETY: See the reasoning in [remaining-elements-safety].
472472
unsafe {
473473
end_r = end_r.sub(1);
474-
ptr::swap(l, r.sub((*end_r as usize) + 1));
474+
ptr::swap(l, r.sub(usize::from(*end_r) + 1));
475475
l = l.add(1);
476476
}
477477
}

0 commit comments

Comments
 (0)