Skip to content

Commit e3ee9af

Browse files
committed
Aggressively replace pointer::offset with add and sub
1 parent e13fa1c commit e3ee9af

File tree

26 files changed

+140
-140
lines changed

26 files changed

+140
-140
lines changed

compiler/rustc_arena/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ impl<T> TypedArena<T> {
218218
} else {
219219
let ptr = self.ptr.get();
220220
// Advance the pointer.
221-
self.ptr.set(self.ptr.get().offset(1));
221+
self.ptr.set(self.ptr.get().add(1));
222222
// Write into uninitialized memory.
223223
ptr::write(ptr, object);
224224
&mut *ptr

compiler/rustc_codegen_cranelift/example/alloc_system.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ mod platform {
9494
struct Header(*mut u8);
9595
const HEAP_ZERO_MEMORY: DWORD = 0x00000008;
9696
unsafe fn get_header<'a>(ptr: *mut u8) -> &'a mut Header {
97-
&mut *(ptr as *mut Header).offset(-1)
97+
&mut *(ptr as *mut Header).sub(1)
9898
}
9999
unsafe fn align_ptr(ptr: *mut u8, align: usize) -> *mut u8 {
100100
let aligned = ptr.add(align - (ptr as usize & (align - 1)));

compiler/rustc_codegen_gcc/example/alloc_system.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ mod platform {
156156
struct Header(*mut u8);
157157
const HEAP_ZERO_MEMORY: DWORD = 0x00000008;
158158
unsafe fn get_header<'a>(ptr: *mut u8) -> &'a mut Header {
159-
&mut *(ptr as *mut Header).offset(-1)
159+
&mut *(ptr as *mut Header).sub(1)
160160
}
161161
unsafe fn align_ptr(ptr: *mut u8, align: usize) -> *mut u8 {
162162
let aligned = ptr.add(align - (ptr as usize & (align - 1)));

compiler/rustc_serialize/src/serialize.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ impl<D: Decoder, T: Decodable<D>> Decodable<D> for Vec<T> {
273273
unsafe {
274274
let ptr: *mut T = vec.as_mut_ptr();
275275
for i in 0..len {
276-
std::ptr::write(ptr.offset(i as isize), Decodable::decode(d));
276+
std::ptr::write(ptr.add(i), Decodable::decode(d));
277277
}
278278
vec.set_len(len);
279279
}

library/alloc/src/alloc/tests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ fn allocate_zeroed() {
1515
let end = i.add(layout.size());
1616
while i < end {
1717
assert_eq!(*i, 0);
18-
i = i.offset(1);
18+
i = i.add(1);
1919
}
2020
Global.deallocate(ptr.as_non_null_ptr(), layout);
2121
}

library/alloc/src/collections/vec_deque/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2447,8 +2447,8 @@ impl<T, A: Allocator> VecDeque<T, A> {
24472447
let mut right_offset = 0;
24482448
for i in left_edge..right_edge {
24492449
right_offset = (i - left_edge) % (cap - right_edge);
2450-
let src: isize = (right_edge + right_offset) as isize;
2451-
ptr::swap(buf.add(i), buf.offset(src));
2450+
let src = right_edge + right_offset;
2451+
ptr::swap(buf.add(i), buf.add(src));
24522452
}
24532453
let n_ops = right_edge - left_edge;
24542454
left_edge += n_ops;

library/alloc/src/slice.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1024,7 +1024,7 @@ where
10241024
// Consume the greater side.
10251025
// If equal, prefer the right run to maintain stability.
10261026
unsafe {
1027-
let to_copy = if is_less(&*right.offset(-1), &*left.offset(-1)) {
1027+
let to_copy = if is_less(&*right.sub(1), &*left.sub(1)) {
10281028
decrement_and_get(left)
10291029
} else {
10301030
decrement_and_get(right)
@@ -1038,12 +1038,12 @@ where
10381038

10391039
unsafe fn get_and_increment<T>(ptr: &mut *mut T) -> *mut T {
10401040
let old = *ptr;
1041-
*ptr = unsafe { ptr.offset(1) };
1041+
*ptr = unsafe { ptr.add(1) };
10421042
old
10431043
}
10441044

10451045
unsafe fn decrement_and_get<T>(ptr: &mut *mut T) -> *mut T {
1046-
*ptr = unsafe { ptr.offset(-1) };
1046+
*ptr = unsafe { ptr.sub(1) };
10471047
*ptr
10481048
}
10491049

library/alloc/src/vec/in_place_collect.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ where
267267
// one slot in the underlying storage will have been freed up and we can immediately
268268
// write back the result.
269269
unsafe {
270-
let dst = dst_buf.offset(i as isize);
270+
let dst = dst_buf.add(i);
271271
debug_assert!(dst as *const _ <= end, "InPlaceIterable contract violation");
272272
ptr::write(dst, self.__iterator_get_unchecked(i));
273273
// Since this executes user code which can panic we have to bump the pointer

library/alloc/src/vec/into_iter.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ impl<T, A: Allocator> Iterator for IntoIter<T, A> {
159159
Some(unsafe { mem::zeroed() })
160160
} else {
161161
let old = self.ptr;
162-
self.ptr = unsafe { self.ptr.offset(1) };
162+
self.ptr = unsafe { self.ptr.add(1) };
163163

164164
Some(unsafe { ptr::read(old) })
165165
}
@@ -271,7 +271,7 @@ impl<T, A: Allocator> DoubleEndedIterator for IntoIter<T, A> {
271271
// Make up a value of this ZST.
272272
Some(unsafe { mem::zeroed() })
273273
} else {
274-
self.end = unsafe { self.end.offset(-1) };
274+
self.end = unsafe { self.end.sub(1) };
275275

276276
Some(unsafe { ptr::read(self.end) })
277277
}
@@ -285,7 +285,7 @@ impl<T, A: Allocator> DoubleEndedIterator for IntoIter<T, A> {
285285
self.end = self.end.wrapping_byte_sub(step_size);
286286
} else {
287287
// SAFETY: same as for advance_by()
288-
self.end = unsafe { self.end.offset(step_size.wrapping_neg() as isize) };
288+
self.end = unsafe { self.end.sub(step_size) };
289289
}
290290
let to_drop = ptr::slice_from_raw_parts_mut(self.end as *mut T, step_size);
291291
// SAFETY: same as for advance_by()

library/alloc/src/vec/mod.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -542,8 +542,8 @@ impl<T> Vec<T> {
542542
///
543543
/// unsafe {
544544
/// // Overwrite memory with 4, 5, 6
545-
/// for i in 0..len as isize {
546-
/// ptr::write(p.offset(i), 4 + i);
545+
/// for i in 0..len {
546+
/// ptr::write(p.add(i), 4 + i);
547547
/// }
548548
///
549549
/// // Put everything back together into a Vec
@@ -702,8 +702,8 @@ impl<T, A: Allocator> Vec<T, A> {
702702
///
703703
/// unsafe {
704704
/// // Overwrite memory with 4, 5, 6
705-
/// for i in 0..len as isize {
706-
/// ptr::write(p.offset(i), 4 + i);
705+
/// for i in 0..len {
706+
/// ptr::write(p.add(i), 4 + i);
707707
/// }
708708
///
709709
/// // Put everything back together into a Vec
@@ -1393,7 +1393,7 @@ impl<T, A: Allocator> Vec<T, A> {
13931393
if index < len {
13941394
// Shift everything over to make space. (Duplicating the
13951395
// `index`th element into two consecutive places.)
1396-
ptr::copy(p, p.offset(1), len - index);
1396+
ptr::copy(p, p.add(1), len - index);
13971397
} else if index == len {
13981398
// No elements need shifting.
13991399
} else {
@@ -1455,7 +1455,7 @@ impl<T, A: Allocator> Vec<T, A> {
14551455
ret = ptr::read(ptr);
14561456

14571457
// Shift everything down to fill in that spot.
1458-
ptr::copy(ptr.offset(1), ptr, len - index - 1);
1458+
ptr::copy(ptr.add(1), ptr, len - index - 1);
14591459
}
14601460
self.set_len(len - 1);
14611461
ret
@@ -2408,7 +2408,7 @@ impl<T, A: Allocator> Vec<T, A> {
24082408
// Write all elements except the last one
24092409
for _ in 1..n {
24102410
ptr::write(ptr, value.next());
2411-
ptr = ptr.offset(1);
2411+
ptr = ptr.add(1);
24122412
// Increment the length in every step in case next() panics
24132413
local_len.increment_len(1);
24142414
}

library/alloc/src/vec/spec_extend.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ where
3939
let mut local_len = SetLenOnDrop::new(&mut self.len);
4040
iterator.for_each(move |element| {
4141
ptr::write(ptr, element);
42-
ptr = ptr.offset(1);
42+
ptr = ptr.add(1);
4343
// Since the loop executes user code which can panic we have to bump the pointer
4444
// after each step.
4545
// NB can't overflow since we would have had to alloc the address space

library/alloc/tests/str.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -1010,11 +1010,11 @@ fn test_as_bytes_fail() {
10101010
fn test_as_ptr() {
10111011
let buf = "hello".as_ptr();
10121012
unsafe {
1013-
assert_eq!(*buf.offset(0), b'h');
1014-
assert_eq!(*buf.offset(1), b'e');
1015-
assert_eq!(*buf.offset(2), b'l');
1016-
assert_eq!(*buf.offset(3), b'l');
1017-
assert_eq!(*buf.offset(4), b'o');
1013+
assert_eq!(*buf.add(0), b'h');
1014+
assert_eq!(*buf.add(1), b'e');
1015+
assert_eq!(*buf.add(2), b'l');
1016+
assert_eq!(*buf.add(3), b'l');
1017+
assert_eq!(*buf.add(4), b'o');
10181018
}
10191019
}
10201020

0 commit comments

Comments
 (0)