export assert_unsafe_precondition macro for std-internal use

This commit is contained in:
The 8472 2024-04-21 16:34:42 +02:00
parent 38ded12923
commit 25babe9a79
4 changed files with 11 additions and 4 deletions

View File

@ -2720,7 +2720,7 @@ pub const fn is_val_statically_known<T: Copy>(_arg: T) -> bool {
#[unstable(feature = "core_intrinsics", issue = "none")] #[unstable(feature = "core_intrinsics", issue = "none")]
#[inline(always)] #[inline(always)]
#[cfg_attr(not(bootstrap), rustc_intrinsic)] // just make it a regular fn in bootstrap #[cfg_attr(not(bootstrap), rustc_intrinsic)] // just make it a regular fn in bootstrap
pub(crate) const fn ub_checks() -> bool { pub const fn ub_checks() -> bool {
cfg!(debug_assertions) cfg!(debug_assertions)
} }

View File

@ -193,6 +193,7 @@
#![feature(str_split_inclusive_remainder)] #![feature(str_split_inclusive_remainder)]
#![feature(str_split_remainder)] #![feature(str_split_remainder)]
#![feature(strict_provenance)] #![feature(strict_provenance)]
#![feature(ub_checks)]
#![feature(unchecked_shifts)] #![feature(unchecked_shifts)]
#![feature(utf16_extra)] #![feature(utf16_extra)]
#![feature(utf16_extra_const)] #![feature(utf16_extra_const)]
@ -370,7 +371,8 @@ pub mod assert_matches {
pub mod intrinsics; pub mod intrinsics;
pub mod mem; pub mod mem;
pub mod ptr; pub mod ptr;
mod ub_checks; #[unstable(feature = "ub_checks", issue = "none")]
pub mod ub_checks;
/* Core language traits */ /* Core language traits */

View File

@ -46,6 +46,8 @@
/// variables cannot be optimized out in MIR, an innocent-looking `let` can produce enough /// variables cannot be optimized out in MIR, an innocent-looking `let` can produce enough
/// debuginfo to have a measurable compile-time impact on debug builds. /// debuginfo to have a measurable compile-time impact on debug builds.
#[allow_internal_unstable(const_ub_checks)] // permit this to be called in stably-const fn #[allow_internal_unstable(const_ub_checks)] // permit this to be called in stably-const fn
#[macro_export]
#[unstable(feature = "ub_checks", issue = "none")]
macro_rules! assert_unsafe_precondition { macro_rules! assert_unsafe_precondition {
($kind:ident, $message:expr, ($($name:ident:$ty:ty = $arg:expr),*$(,)?) => $e:expr $(,)?) => { ($kind:ident, $message:expr, ($($name:ident:$ty:ty = $arg:expr),*$(,)?) => $e:expr $(,)?) => {
{ {
@ -75,11 +77,13 @@ const fn precondition_check($($name:$ty),*) {
} }
}; };
} }
pub(crate) use assert_unsafe_precondition; #[unstable(feature = "ub_checks", issue = "none")]
pub use assert_unsafe_precondition;
/// Checking library UB is always enabled when UB-checking is done /// Checking library UB is always enabled when UB-checking is done
/// (and we use a reexport so that there is no unnecessary wrapper function). /// (and we use a reexport so that there is no unnecessary wrapper function).
pub(crate) use intrinsics::ub_checks as check_library_ub; #[unstable(feature = "ub_checks", issue = "none")]
pub use intrinsics::ub_checks as check_library_ub;
/// Determines whether we should check for language UB. /// Determines whether we should check for language UB.
/// ///

View File

@ -358,6 +358,7 @@
#![feature(str_internals)] #![feature(str_internals)]
#![feature(strict_provenance)] #![feature(strict_provenance)]
#![feature(strict_provenance_atomic_ptr)] #![feature(strict_provenance_atomic_ptr)]
#![feature(ub_checks)]
// tidy-alphabetical-end // tidy-alphabetical-end
// //
// Library features (alloc): // Library features (alloc):