From afaa54a99d75bc6287d835b1ee33e1b15bda462e Mon Sep 17 00:00:00 2001 From: Maybe Waffle Date: Fri, 29 Oct 2021 23:45:09 +0300 Subject: [PATCH] Apply changes proposed in the review --- library/core/src/slice/raw.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/library/core/src/slice/raw.rs b/library/core/src/slice/raw.rs index edae555206f..81bb16d5401 100644 --- a/library/core/src/slice/raw.rs +++ b/library/core/src/slice/raw.rs @@ -141,17 +141,18 @@ const fn debug_check_data_len(data: *const T, len: usize) { assert!(is_aligned_and_not_null(data), "attempt to create unaligned or null slice"); } - const fn ctfe_check(_data: *const T) { - // It's impossible to check alignment in const fn. - // - // CTFE engine checks that the pointer is aligned and not null. - } + const fn noop(_: *const T) {} // SAFETY: - // - `calling from_raw_parts[_mut]` with arguments that fail to fulfil checks made here is UB, so unless UB is already triggered this is noop - // - CTFE makes the same checks as `rt_check`, so behavior change is not observable due to compilation error + // + // `rt_check` is just a debug assert to hint users that they are causing UB, + // it is not required for safety (the safety must be guatanteed by + // the `from_raw_parts[_mut]` caller). + // + // Since the checks are not required, we ignore them in CTFE as they can't + // be done there (alignment does not make much sense there). unsafe { - crate::intrinsics::const_eval_select((data,), ctfe_check, rt_check); + crate::intrinsics::const_eval_select((data,), noop, rt_check); } assert!(