Skip to content

Commit 8b2a7da

Browse files
committed
Rename assert_uninit_valid intrinsic
It's not about "uninit" anymore but about "filling with 0x01 bytes" so the name should at least try to reflect that.
1 parent 32da230 commit 8b2a7da

File tree

9 files changed

+25
-19
lines changed

9 files changed

+25
-19
lines changed

compiler/rustc_codegen_cranelift/src/intrinsics/mod.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,7 @@ fn codegen_regular_intrinsic_call<'tcx>(
713713
let res = CValue::by_val(swap(&mut fx.bcx, val), arg.layout());
714714
ret.write_cvalue(fx, res);
715715
}
716-
sym::assert_inhabited | sym::assert_zero_valid | sym::assert_uninit_valid => {
716+
sym::assert_inhabited | sym::assert_zero_valid | sym::assert_mem_uninitialized_valid => {
717717
intrinsic_args!(fx, args => (); intrinsic);
718718

719719
let layout = fx.layout_of(substs.type_at(0));
@@ -742,7 +742,9 @@ fn codegen_regular_intrinsic_call<'tcx>(
742742
return;
743743
}
744744

745-
if intrinsic == sym::assert_uninit_valid && !fx.tcx.permits_uninit_init(layout) {
745+
if intrinsic == sym::assert_mem_uninitialized_valid
746+
&& !fx.tcx.permits_uninit_init(layout)
747+
{
746748
with_no_trimmed_paths!({
747749
crate::base::codegen_panic(
748750
fx,

compiler/rustc_codegen_ssa/src/mir/block.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -666,12 +666,12 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
666666
enum AssertIntrinsic {
667667
Inhabited,
668668
ZeroValid,
669-
UninitValid,
669+
MemUninitializedValid,
670670
}
671671
let panic_intrinsic = intrinsic.and_then(|i| match i {
672672
sym::assert_inhabited => Some(AssertIntrinsic::Inhabited),
673673
sym::assert_zero_valid => Some(AssertIntrinsic::ZeroValid),
674-
sym::assert_uninit_valid => Some(AssertIntrinsic::UninitValid),
674+
sym::assert_mem_uninitialized_valid => Some(AssertIntrinsic::MemUninitializedValid),
675675
_ => None,
676676
});
677677
if let Some(intrinsic) = panic_intrinsic {
@@ -682,7 +682,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
682682
let do_panic = match intrinsic {
683683
Inhabited => layout.abi.is_uninhabited(),
684684
ZeroValid => !bx.tcx().permits_zero_init(layout),
685-
UninitValid => !bx.tcx().permits_uninit_init(layout),
685+
MemUninitializedValid => !bx.tcx().permits_uninit_init(layout),
686686
};
687687
Some(if do_panic {
688688
let msg_str = with_no_visible_paths!({

compiler/rustc_const_eval/src/interpret/intrinsics.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,9 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
432432
sym::transmute => {
433433
self.copy_op(&args[0], dest, /*allow_transmute*/ true)?;
434434
}
435-
sym::assert_inhabited | sym::assert_zero_valid | sym::assert_uninit_valid => {
435+
sym::assert_inhabited
436+
| sym::assert_zero_valid
437+
| sym::assert_mem_uninitialized_valid => {
436438
let ty = instance.substs.type_at(0);
437439
let layout = self.layout_of(ty)?;
438440

@@ -464,7 +466,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
464466
}
465467
}
466468

467-
if intrinsic_name == sym::assert_uninit_valid {
469+
if intrinsic_name == sym::assert_mem_uninitialized_valid {
468470
let should_panic = !self.tcx.permits_uninit_init(layout);
469471

470472
if should_panic {

compiler/rustc_hir_analysis/src/check/intrinsic.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ pub fn intrinsic_operation_unsafety(tcx: TyCtxt<'_>, intrinsic_id: DefId) -> hir
7575
sym::abort
7676
| sym::assert_inhabited
7777
| sym::assert_zero_valid
78-
| sym::assert_uninit_valid
78+
| sym::assert_mem_uninitialized_valid
7979
| sym::size_of
8080
| sym::min_align_of
8181
| sym::needs_drop
@@ -193,9 +193,9 @@ pub fn check_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>) {
193193
}
194194
sym::rustc_peek => (1, vec![param(0)], param(0)),
195195
sym::caller_location => (0, vec![], tcx.caller_location_ty()),
196-
sym::assert_inhabited | sym::assert_zero_valid | sym::assert_uninit_valid => {
197-
(1, Vec::new(), tcx.mk_unit())
198-
}
196+
sym::assert_inhabited
197+
| sym::assert_zero_valid
198+
| sym::assert_mem_uninitialized_valid => (1, Vec::new(), tcx.mk_unit()),
199199
sym::forget => (1, vec![param(0)], tcx.mk_unit()),
200200
sym::transmute => (2, vec![param(0)], param(1)),
201201
sym::prefetch_read_data

compiler/rustc_span/src/symbol.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -377,9 +377,9 @@ symbols! {
377377
assert_eq_macro,
378378
assert_inhabited,
379379
assert_macro,
380+
assert_mem_uninitialized_valid,
380381
assert_ne_macro,
381382
assert_receiver_is_total_eq,
382-
assert_uninit_valid,
383383
assert_zero_valid,
384384
asserting,
385385
associated_const_equality,

library/core/src/intrinsics.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -959,13 +959,14 @@ extern "rust-intrinsic" {
959959
#[rustc_safe_intrinsic]
960960
pub fn assert_zero_valid<T>();
961961

962-
/// A guard for unsafe functions that cannot ever be executed if `T` has invalid
963-
/// bit patterns: This will statically either panic, or do nothing.
962+
/// A guard for `std::mem::uninitialized`. Checks whether a repeated bit pattern `0x01`
963+
/// is legal for `T`: This will statically either panic, or do nothing.
964964
///
965965
/// This intrinsic does not have a stable counterpart.
966966
#[rustc_const_unstable(feature = "const_assert_type2", issue = "none")]
967967
#[rustc_safe_intrinsic]
968-
pub fn assert_uninit_valid<T>();
968+
#[cfg(not(bootstrap))]
969+
pub fn assert_mem_uninitialized_valid<T>();
969970

970971
/// Gets a reference to a static `Location` indicating where it was called.
971972
///

library/core/src/mem/mod.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,8 @@ pub unsafe fn zeroed<T>() -> T {
682682
pub unsafe fn uninitialized<T>() -> T {
683683
// SAFETY: the caller must guarantee that an uninitialized value is valid for `T`.
684684
unsafe {
685-
intrinsics::assert_uninit_valid::<T>();
685+
#[cfg(not(bootstrap))] // If the compiler hits this itself then it deserves the UB.
686+
intrinsics::assert_mem_uninitialized_valid::<T>();
686687
let mut val = MaybeUninit::<T>::uninit();
687688

688689
// Fill memory with 0x01, as an imperfect mitigation for old code that uses this function on

src/test/ui/consts/assert-type-intrinsics.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ fn main() {
1313
//~^ERROR: evaluation of constant value failed
1414
};
1515
const _BAD2: () = {
16-
intrinsics::assert_uninit_valid::<&'static i32>();
16+
intrinsics::assert_mem_uninitialized_valid::<&'static i32>();
1717
//~^ERROR: evaluation of constant value failed
1818
};
1919
const _BAD3: () = {

src/test/ui/consts/assert-type-intrinsics.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ LL | MaybeUninit::<!>::uninit().assume_init();
77
error[E0080]: evaluation of constant value failed
88
--> $DIR/assert-type-intrinsics.rs:16:9
99
|
10-
LL | intrinsics::assert_uninit_valid::<&'static i32>();
11-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ aborted execution: attempted to leave type `&i32` uninitialized, which is invalid
10+
LL | intrinsics::assert_mem_uninitialized_valid::<&'static i32>();
11+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ aborted execution: attempted to leave type `&i32` uninitialized, which is invalid
1212

1313
error[E0080]: evaluation of constant value failed
1414
--> $DIR/assert-type-intrinsics.rs:20:9

0 commit comments

Comments
 (0)