Rollup merge of #131384 - saethlin:precondition-tests, r=ibraheemdev · qinheping/verify-rust-std@ecb3830 (original) (raw)

`@@ -448,7 +448,7 @@

`

448

448

``

449

449

`use crate::cmp::Ordering;

`

450

450

`use crate:📑:FnPtr;

`

451

``

`-

use crate::mem::{self, MaybeUninit};

`

``

451

`+

use crate::mem::{self, MaybeUninit, SizedTypeProperties};

`

452

452

`use crate::{fmt, hash, intrinsics, ub_checks};

`

453

453

``

454

454

`mod alignment;

`

`@@ -1165,10 +1165,12 @@ pub const unsafe fn swap_nonoverlapping(x: *mut T, y: *mut T, count: usize) {

`

1165

1165

` size: usize = size_of::(),

`

1166

1166

` align: usize = align_of::(),

`

1167

1167

` count: usize = count,

`

1168

``

`-

) =>

`

1169

``

`-

ub_checks::is_aligned_and_not_null(x, align)

`

1170

``

`-

&& ub_checks::is_aligned_and_not_null(y, align)

`

1171

``

`-

&& ub_checks::is_nonoverlapping(x, y, size, count)

`

``

1168

`+

) => {

`

``

1169

`+

let zero_size = size == 0 || count == 0;

`

``

1170

`+

ub_checks::is_aligned_and_not_null(x, align, zero_size)

`

``

1171

`+

&& ub_checks::is_aligned_and_not_null(y, align, zero_size)

`

``

1172

`+

&& ub_checks::is_nonoverlapping(x, y, size, count)

`

``

1173

`+

}

`

1172

1174

`);

`

1173

1175

``

1174

1176

`// Split up the slice into small power-of-two-sized chunks that LLVM is able

`

`@@ -1278,7 +1280,8 @@ pub const unsafe fn replace(dst: *mut T, src: T) -> T {

`

1278

1280

`(

`

1279

1281

` addr: *const () = dst as *const (),

`

1280

1282

` align: usize = align_of::(),

`

1281

``

`-

) => ub_checks::is_aligned_and_not_null(addr, align)

`

``

1283

`+

is_zst: bool = T::IS_ZST,

`

``

1284

`+

) => ub_checks::is_aligned_and_not_null(addr, align, is_zst)

`

1282

1285

`);

`

1283

1286

` mem::replace(&mut *dst, src)

`

1284

1287

`}

`

`@@ -1430,7 +1433,8 @@ pub const unsafe fn read(src: *const T) -> T {

`

1430

1433

`(

`

1431

1434

` addr: *const () = src as *const (),

`

1432

1435

` align: usize = align_of::(),

`

1433

``

`-

) => ub_checks::is_aligned_and_not_null(addr, align)

`

``

1436

`+

is_zst: bool = T::IS_ZST,

`

``

1437

`+

) => ub_checks::is_aligned_and_not_null(addr, align, is_zst)

`

1434

1438

`);

`

1435

1439

`crate::intrinsics::read_via_copy(src)

`

1436

1440

`}

`

`@@ -1635,7 +1639,8 @@ pub const unsafe fn write(dst: *mut T, src: T) {

`

1635

1639

`(

`

1636

1640

` addr: *mut () = dst as *mut (),

`

1637

1641

` align: usize = align_of::(),

`

1638

``

`-

) => ub_checks::is_aligned_and_not_null(addr, align)

`

``

1642

`+

is_zst: bool = T::IS_ZST,

`

``

1643

`+

) => ub_checks::is_aligned_and_not_null(addr, align, is_zst)

`

1639

1644

`);

`

1640

1645

` intrinsics::write_via_move(dst, src)

`

1641

1646

`}

`

`@@ -1808,7 +1813,8 @@ pub unsafe fn read_volatile(src: *const T) -> T {

`

1808

1813

`(

`

1809

1814

` addr: *const () = src as *const (),

`

1810

1815

` align: usize = align_of::(),

`

1811

``

`-

) => ub_checks::is_aligned_and_not_null(addr, align)

`

``

1816

`+

is_zst: bool = T::IS_ZST,

`

``

1817

`+

) => ub_checks::is_aligned_and_not_null(addr, align, is_zst)

`

1812

1818

`);

`

1813

1819

` intrinsics::volatile_load(src)

`

1814

1820

`}

`

`@@ -1887,7 +1893,8 @@ pub unsafe fn write_volatile(dst: *mut T, src: T) {

`

1887

1893

`(

`

1888

1894

` addr: *mut () = dst as *mut (),

`

1889

1895

` align: usize = align_of::(),

`

1890

``

`-

) => ub_checks::is_aligned_and_not_null(addr, align)

`

``

1896

`+

is_zst: bool = T::IS_ZST,

`

``

1897

`+

) => ub_checks::is_aligned_and_not_null(addr, align, is_zst)

`

1891

1898

`);

`

1892

1899

` intrinsics::volatile_store(dst, src);

`

1893

1900

`}

`