Skip to content

Commit 06183c7

Browse files
committed
Fix library build and add more tests and a TODO list
1 parent 19c585e commit 06183c7

File tree

5 files changed

+68
-2
lines changed

5 files changed

+68
-2
lines changed

library/core/src/ptr/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1432,7 +1432,8 @@ pub const unsafe fn read<T>(src: *const T) -> T {
14321432
(
14331433
addr: *const () = src as *const (),
14341434
align: usize = align_of::<T>(),
1435-
) => ub_checks::is_aligned_and_not_null(addr, align)
1435+
is_zst: bool = T::IS_ZST,
1436+
) => ub_checks::is_aligned_and_not_null(addr, align, is_zst)
14361437
);
14371438
crate::intrinsics::read_via_copy(src)
14381439
}
@@ -1637,7 +1638,8 @@ pub const unsafe fn write<T>(dst: *mut T, src: T) {
16371638
(
16381639
addr: *mut () = dst as *mut (),
16391640
align: usize = align_of::<T>(),
1640-
) => ub_checks::is_aligned_and_not_null(addr, align)
1641+
is_zst: bool = T::IS_ZST,
1642+
) => ub_checks::is_aligned_and_not_null(addr, align, is_zst)
16411643
);
16421644
intrinsics::write_via_move(dst, src)
16431645
}

tests/ui/precondition-checks/TODO

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
ptr::swap_nonoverlapping
2+
ptr::replace
3+
ptr::read
4+
ptr::write
5+
ptr::read_volatile
6+
ptr::write_volatile
7+
8+
// for range::Range and for ops::Range?
9+
str::get_unchecked
10+
str::get_unchecked_mut
11+
12+
IndexRange::new_unchecked
13+
14+
char::from_u32_unchecked
15+
ascii::Char::digit_unchecked
16+
17+
ptr::copy
18+
ptr::write_bytes
19+
20+
slice::from_raw_parts
21+
slice::from_raw_parts_mut
22+
23+
unchecked_add
24+
unchecked_sub
25+
unchecked_mul
26+
unchecked_shr
27+
unchecked_shl
28+
29+
NonZero::from_mut_unchecked
30+
31+
unreachable_unchecked
32+
assert_unchecked
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: Alignment::new_unchecked
4+
//@ ignore-debug
5+
6+
#![feature(ptr_alignment_type)]
7+
8+
fn main() {
9+
unsafe {
10+
std::ptr::Alignment::new_unchecked(0);
11+
}
12+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: Layout::from_size_align_unchecked
4+
//@ ignore-debug
5+
6+
fn main() {
7+
unsafe {
8+
std::alloc::Layout::from_size_align_unchecked(isize::MAX as usize, 2);
9+
}
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: NonNull::new_unchecked
4+
//@ ignore-debug
5+
6+
fn main() {
7+
unsafe {
8+
std::ptr::NonNull::new_unchecked(std::ptr::null_mut::<u8>());
9+
}
10+
}

0 commit comments

Comments
 (0)