export assert_unsafe_precondition macro for std-internal use
This commit is contained in:
parent
38ded12923
commit
25babe9a79
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 */
|
||||||
|
|
||||||
|
@ -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.
|
||||||
///
|
///
|
||||||
|
@ -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):
|
||||||
|
Loading…
Reference in New Issue
Block a user