From bcf8015177683efb407cbab2b05f98322da9dab3 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 17 Mar 2024 17:03:45 +0100 Subject: [PATCH] remove retag_box_to_raw, it is no longer needed --- .../rustc_hir_analysis/src/check/intrinsic.rs | 4 ---- compiler/rustc_span/src/symbol.rs | 1 - library/core/src/intrinsics.rs | 13 ------------- src/tools/miri/src/borrow_tracker/mod.rs | 15 +-------------- .../src/borrow_tracker/stacked_borrows/mod.rs | 18 ------------------ .../src/borrow_tracker/tree_borrows/mod.rs | 9 --------- src/tools/miri/src/shims/intrinsics/mod.rs | 12 ------------ 7 files changed, 1 insertion(+), 71 deletions(-) diff --git a/compiler/rustc_hir_analysis/src/check/intrinsic.rs b/compiler/rustc_hir_analysis/src/check/intrinsic.rs index bf5838143d945..35755a46df3a4 100644 --- a/compiler/rustc_hir_analysis/src/check/intrinsic.rs +++ b/compiler/rustc_hir_analysis/src/check/intrinsic.rs @@ -658,10 +658,6 @@ pub fn check_intrinsic_type( sym::simd_shuffle => (3, 0, vec![param(0), param(0), param(1)], param(2)), sym::simd_shuffle_generic => (2, 1, vec![param(0), param(0)], param(1)), - sym::retag_box_to_raw => { - (2, 0, vec![Ty::new_mut_ptr(tcx, param(0))], Ty::new_mut_ptr(tcx, param(0))) - } - other => { tcx.dcx().emit_err(UnrecognizedIntrinsicFunction { span, name: other }); return; diff --git a/compiler/rustc_span/src/symbol.rs b/compiler/rustc_span/src/symbol.rs index e43c9533382e1..63b950a2803c4 100644 --- a/compiler/rustc_span/src/symbol.rs +++ b/compiler/rustc_span/src/symbol.rs @@ -1463,7 +1463,6 @@ symbols! { residual, result, resume, - retag_box_to_raw, return_position_impl_trait_in_trait, return_type_notation, rhs, diff --git a/library/core/src/intrinsics.rs b/library/core/src/intrinsics.rs index 86b9a39d68a67..f939720287fd4 100644 --- a/library/core/src/intrinsics.rs +++ b/library/core/src/intrinsics.rs @@ -2709,19 +2709,6 @@ pub unsafe fn vtable_size(_ptr: *const ()) -> usize { unreachable!() } -/// Retag a box pointer as part of casting it to a raw pointer. This is the `Box` equivalent of -/// `(x: &mut T) as *mut T`. The input pointer must be the pointer of a `Box` (passed as raw pointer -/// to avoid all questions around move semantics and custom allocators), and `A` must be the `Box`'s -/// allocator. -#[unstable(feature = "core_intrinsics", issue = "none")] -#[rustc_nounwind] -#[cfg_attr(not(bootstrap), rustc_intrinsic)] -#[cfg_attr(bootstrap, inline)] -pub unsafe fn retag_box_to_raw(ptr: *mut T) -> *mut T { - // Miri needs to adjust the provenance, but for regular codegen this is not needed - ptr -} - // Some functions are defined here because they accidentally got made // available in this module on stable. See . // (`transmute` also falls into this category, but it cannot be wrapped due to the diff --git a/src/tools/miri/src/borrow_tracker/mod.rs b/src/tools/miri/src/borrow_tracker/mod.rs index 0f7200fb4074a..8d76a488269fc 100644 --- a/src/tools/miri/src/borrow_tracker/mod.rs +++ b/src/tools/miri/src/borrow_tracker/mod.rs @@ -5,7 +5,7 @@ use std::num::NonZero; use smallvec::SmallVec; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; -use rustc_middle::{mir::RetagKind, ty::Ty}; +use rustc_middle::mir::RetagKind; use rustc_target::abi::Size; use crate::*; @@ -291,19 +291,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> { } } - fn retag_box_to_raw( - &mut self, - val: &ImmTy<'tcx, Provenance>, - alloc_ty: Ty<'tcx>, - ) -> InterpResult<'tcx, ImmTy<'tcx, Provenance>> { - let this = self.eval_context_mut(); - let method = this.machine.borrow_tracker.as_ref().unwrap().borrow().borrow_tracker_method; - match method { - BorrowTrackerMethod::StackedBorrows => this.sb_retag_box_to_raw(val, alloc_ty), - BorrowTrackerMethod::TreeBorrows => this.tb_retag_box_to_raw(val, alloc_ty), - } - } - fn retag_place_contents( &mut self, kind: RetagKind, diff --git a/src/tools/miri/src/borrow_tracker/stacked_borrows/mod.rs b/src/tools/miri/src/borrow_tracker/stacked_borrows/mod.rs index 613a245c06f1d..7a6a85a2f7905 100644 --- a/src/tools/miri/src/borrow_tracker/stacked_borrows/mod.rs +++ b/src/tools/miri/src/borrow_tracker/stacked_borrows/mod.rs @@ -865,24 +865,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> { this.sb_retag_reference(val, new_perm, RetagInfo { cause, in_field: false }) } - fn sb_retag_box_to_raw( - &mut self, - val: &ImmTy<'tcx, Provenance>, - alloc_ty: Ty<'tcx>, - ) -> InterpResult<'tcx, ImmTy<'tcx, Provenance>> { - let this = self.eval_context_mut(); - let is_global_alloc = alloc_ty.ty_adt_def().is_some_and(|adt| { - let global_alloc = this.tcx.require_lang_item(rustc_hir::LangItem::GlobalAlloc, None); - adt.did() == global_alloc - }); - if is_global_alloc { - // Retag this as-if it was a mutable reference. - this.sb_retag_ptr_value(RetagKind::Raw, val) - } else { - Ok(val.clone()) - } - } - fn sb_retag_place_contents( &mut self, kind: RetagKind, diff --git a/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs b/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs index 9eb78b08ef77d..80bdcbb7559f2 100644 --- a/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs +++ b/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs @@ -392,15 +392,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> { } } - fn tb_retag_box_to_raw( - &mut self, - val: &ImmTy<'tcx, Provenance>, - _alloc_ty: Ty<'tcx>, - ) -> InterpResult<'tcx, ImmTy<'tcx, Provenance>> { - // Casts to raw pointers are NOPs in Tree Borrows. - Ok(val.clone()) - } - /// Retag all pointers that are stored in this place. fn tb_retag_place_contents( &mut self, diff --git a/src/tools/miri/src/shims/intrinsics/mod.rs b/src/tools/miri/src/shims/intrinsics/mod.rs index 976d4b4de55cb..d16d5d99e9c01 100644 --- a/src/tools/miri/src/shims/intrinsics/mod.rs +++ b/src/tools/miri/src/shims/intrinsics/mod.rs @@ -140,18 +140,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> { this.write_pointer(Pointer::new(ptr.provenance, masked_addr), dest)?; } - "retag_box_to_raw" => { - let [ptr] = check_arg_count(args)?; - let alloc_ty = generic_args[1].expect_ty(); - - let val = this.read_immediate(ptr)?; - let new_val = if this.machine.borrow_tracker.is_some() { - this.retag_box_to_raw(&val, alloc_ty)? - } else { - val - }; - this.write_immediate(*new_val, dest)?; - } // We want to return either `true` or `false` at random, or else something like // ```