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
`}
`