Skip to content

Commit d5666ed

Browse files
committed
Add more tests
1 parent 7188e5f commit d5666ed

20 files changed

+201
-33
lines changed

tests/ui/precondition-checks/TODO

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
1-
ptr::swap_nonoverlapping
2-
ptr::replace
3-
ptr::read
4-
ptr::write
5-
ptr::read_volatile
6-
ptr::write_volatile
7-
81
// for range::Range and for ops::Range?
92
str::get_unchecked
103
str::get_unchecked_mut
@@ -14,19 +7,8 @@ IndexRange::new_unchecked
147
char::from_u32_unchecked
158
ascii::Char::digit_unchecked
169

17-
ptr::copy
18-
ptr::write_bytes
19-
20-
slice::from_raw_parts
21-
slice::from_raw_parts_mut
22-
2310
unchecked_add
2411
unchecked_sub
2512
unchecked_mul
2613
unchecked_shr
2714
unchecked_shl
28-
29-
NonZero::from_mut_unchecked
30-
31-
unreachable_unchecked
32-
assert_unchecked

tests/ui/precondition-checks/alignment.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//@ run-fail
22
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3-
//@ error-pattern: unsafe precondition(s) violated: Alignment::new_unchecked
4-
//@ ignore-debug
3+
//@ error-pattern: unsafe precondition(s) violated: Alignment::new_unchecked requires
54

65
#![feature(ptr_alignment_type)]
76

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: hint::assert_unchecked must never be called when the condition is false
4+
5+
fn main() {
6+
unsafe {
7+
std::hint::assert_unchecked(false);
8+
}
9+
}

tests/ui/precondition-checks/copy-nonoverlapping.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//@ run-fail
22
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3-
//@ error-pattern: unsafe precondition(s) violated: ptr::copy_nonoverlapping
4-
//@ ignore-debug
3+
//@ error-pattern: unsafe precondition(s) violated: ptr::copy_nonoverlapping requires
54
//@ revisions: null_src null_dst misaligned_src misaligned_dst overlapping
65

76
use std::ptr;

tests/ui/precondition-checks/copy.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: ptr::copy requires
4+
//@ revisions: null_src null_dst misaligned_src misaligned_dst
5+
6+
use std::ptr;
7+
8+
fn main() {
9+
let src = [0u16; 3];
10+
let mut dst = [0u16; 3];
11+
let src = src.as_ptr();
12+
let dst = dst.as_mut_ptr();
13+
unsafe {
14+
#[cfg(null_src)]
15+
ptr::copy(ptr::null(), dst, 1);
16+
#[cfg(null_dst)]
17+
ptr::copy(src, ptr::null_mut(), 1);
18+
#[cfg(misaligned_src)]
19+
ptr::copy(src.byte_add(1), dst, 1);
20+
#[cfg(misaligned_dst)]
21+
ptr::copy(src, dst.byte_add(1), 1);
22+
}
23+
}

tests/ui/precondition-checks/get-unchecked.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//@ run-fail
22
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3-
//@ error-pattern: slice::get_unchecked requires
4-
//@ ignore-debug
3+
//@ error-pattern: unsafe precondition(s) violated: slice::get_unchecked requires
54

65
fn main() {
76
unsafe {

tests/ui/precondition-checks/layout.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//@ run-fail
22
//@ 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
3+
//@ error-pattern: unsafe precondition(s) violated: Layout::from_size_align_unchecked requires
54
//@ revisions: toolarge badalign
65
//@[toolarge] compile-flags: --cfg toolarge
76
//@[badalign] compile-flags: --cfg badalign

tests/ui/precondition-checks/nonnull.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//@ run-fail
22
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3-
//@ error-pattern: unsafe precondition(s) violated: NonNull::new_unchecked
4-
//@ ignore-debug
3+
//@ error-pattern: unsafe precondition(s) violated: NonNull::new_unchecked requires
54

65
fn main() {
76
unsafe {
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: NonZero::from_mut_unchecked requires
4+
5+
#![feature(nonzero_from_mut)]
6+
7+
fn main() {
8+
unsafe {
9+
let mut num = 0u8;
10+
std::num::NonZeroU8::from_mut_unchecked(&mut num);
11+
}
12+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: NonZero::new_unchecked requires
4+
5+
fn main() {
6+
unsafe {
7+
std::num::NonZeroU8::new_unchecked(0);
8+
}
9+
}

tests/ui/precondition-checks/read.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: ptr::read requires
4+
//@ revisions: null misaligned
5+
//@ ignore-test
6+
7+
use std::ptr;
8+
9+
fn main() {
10+
let src = [0u16; 2];
11+
let src = src.as_ptr();
12+
unsafe {
13+
#[cfg(null)]
14+
ptr::read(ptr::null::<u8>());
15+
#[cfg(misaligned)]
16+
ptr::read(src.byte_add(1));
17+
}
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: ptr::read_volatile requires
4+
//@ revisions: null misaligned
5+
6+
use std::ptr;
7+
8+
fn main() {
9+
let src = [0u16; 2];
10+
let src = src.as_ptr();
11+
unsafe {
12+
#[cfg(null)]
13+
ptr::read_volatile(ptr::null::<u8>());
14+
#[cfg(misaligned)]
15+
ptr::read_volatile(src.byte_add(1));
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: ptr::replace requires
4+
//@ revisions: null misaligned
5+
6+
use std::ptr;
7+
8+
fn main() {
9+
let mut dst = [0u16; 2];
10+
let dst = dst.as_mut_ptr();
11+
unsafe {
12+
#[cfg(null)]
13+
ptr::replace(ptr::null_mut::<u8>(), 1);
14+
#[cfg(misaligned)]
15+
ptr::replace(dst.byte_add(1), 1u16);
16+
}
17+
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//@ run-fail
22
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3-
//@ error-pattern: unsafe precondition(s) violated: slice::from_raw_parts_mut
4-
//@ ignore-debug
3+
//@ error-pattern: unsafe precondition(s) violated: slice::from_raw_parts_mut requires
54
//@ revisions: null misaligned toolarge
65

76
fn main() {
@@ -11,6 +10,7 @@ fn main() {
1110
#[cfg(misaligned)]
1211
let _s: &mut [u16] = std::slice::from_raw_parts_mut(1usize as *mut u16, 0);
1312
#[cfg(toolarge)]
14-
let _s: &mut [u16] = std::slice::from_raw_parts_mut(2usize as *mut u16, isize::MAX as usize);
13+
let _s: &mut [u16] =
14+
std::slice::from_raw_parts_mut(2usize as *mut u16, isize::MAX as usize);
1515
}
1616
}

tests/ui/precondition-checks/slice-from-raw-parts.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//@ run-fail
22
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3-
//@ error-pattern: unsafe precondition(s) violated: slice::from_raw_parts
4-
//@ ignore-debug
3+
//@ error-pattern: unsafe precondition(s) violated: slice::from_raw_parts requires
54
//@ revisions: null misaligned toolarge
65

76
fn main() {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: ptr::swap_nonoverlapping requires
4+
//@ revisions: null_src null_dst misaligned_src misaligned_dst overlapping
5+
6+
use std::ptr;
7+
8+
fn main() {
9+
let mut src = [0u16; 3];
10+
let mut dst = [0u16; 3];
11+
let src = src.as_mut_ptr();
12+
let dst = dst.as_mut_ptr();
13+
unsafe {
14+
#[cfg(null_src)]
15+
ptr::swap_nonoverlapping(ptr::null_mut(), dst, 1);
16+
#[cfg(null_dst)]
17+
ptr::swap_nonoverlapping(src, ptr::null_mut(), 1);
18+
#[cfg(misaligned_src)]
19+
ptr::swap_nonoverlapping(src.byte_add(1), dst, 1);
20+
#[cfg(misaligned_dst)]
21+
ptr::swap_nonoverlapping(src, dst.byte_add(1), 1);
22+
#[cfg(overlapping)]
23+
ptr::swap_nonoverlapping(dst, dst.add(1), 2);
24+
}
25+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: hint::unreachable_unchecked must never be reached
4+
5+
fn main() {
6+
unsafe {
7+
std::hint::unreachable_unchecked();
8+
}
9+
}

tests/ui/precondition-checks/write.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: ptr::write requires
4+
//@ revisions: null misaligned
5+
//@ ignore-test
6+
7+
use std::ptr;
8+
9+
fn main() {
10+
let mut dst = [0u16; 2];
11+
let mut dst = dst.as_mut_ptr();
12+
unsafe {
13+
#[cfg(null)]
14+
ptr::write(ptr::null_mut::<u8>(), 1u8);
15+
#[cfg(misaligned)]
16+
ptr::write(dst.byte_add(1), 1u16);
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: ptr::write requires
4+
//@ revisions: null misaligned
5+
//@ ignore-test
6+
7+
use std::ptr;
8+
9+
fn main() {
10+
let mut dst = [0u16; 2];
11+
let mut dst = dst.as_mut_ptr();
12+
unsafe {
13+
#[cfg(null)]
14+
ptr::write_bytes(ptr::null_mut::<u8>(), 1u8, 2);
15+
#[cfg(misaligned)]
16+
ptr::write_bytes(dst.byte_add(1), 1u8, 2);
17+
}
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//@ run-fail
2+
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
3+
//@ error-pattern: unsafe precondition(s) violated: ptr::write_volatile requires
4+
//@ revisions: null misaligned
5+
6+
use std::ptr;
7+
8+
fn main() {
9+
let mut dst = [0u16; 2];
10+
let mut dst = dst.as_mut_ptr();
11+
unsafe {
12+
#[cfg(null)]
13+
ptr::write_volatile(ptr::null_mut::<u8>(), 1u8);
14+
#[cfg(misaligned)]
15+
ptr::write_volatile(dst.byte_add(1), 1u16);
16+
}
17+
}

0 commit comments

Comments
 (0)