Use &raw
in the compiler
Like #130865 did for the standard library, we can use `&raw` in the compiler now that stage0 supports it. Also like the other issue, I did not make any doc or test changes at this time.
This commit is contained in:
parent
58420a065b
commit
4160a54dc5
@ -123,7 +123,7 @@ fn get_llvm_object_symbols(
|
||||
llvm::LLVMRustGetSymbols(
|
||||
buf.as_ptr(),
|
||||
buf.len(),
|
||||
std::ptr::addr_of_mut!(*state) as *mut c_void,
|
||||
(&raw mut *state) as *mut c_void,
|
||||
callback,
|
||||
error_callback,
|
||||
)
|
||||
|
@ -167,7 +167,7 @@ impl WriteBackendMethods for LlvmCodegenBackend {
|
||||
fn print_pass_timings(&self) {
|
||||
unsafe {
|
||||
let mut size = 0;
|
||||
let cstr = llvm::LLVMRustPrintPassTimings(std::ptr::addr_of_mut!(size));
|
||||
let cstr = llvm::LLVMRustPrintPassTimings(&raw mut size);
|
||||
if cstr.is_null() {
|
||||
println!("failed to get pass timings");
|
||||
} else {
|
||||
@ -180,7 +180,7 @@ fn print_pass_timings(&self) {
|
||||
fn print_statistics(&self) {
|
||||
unsafe {
|
||||
let mut size = 0;
|
||||
let cstr = llvm::LLVMRustPrintStatistics(std::ptr::addr_of_mut!(size));
|
||||
let cstr = llvm::LLVMRustPrintStatistics(&raw mut size);
|
||||
if cstr.is_null() {
|
||||
println!("failed to get pass stats");
|
||||
} else {
|
||||
|
@ -478,7 +478,7 @@ pub(crate) fn print(req: &PrintRequest, mut out: &mut String, sess: &Session) {
|
||||
&tm,
|
||||
cpu_cstring.as_ptr(),
|
||||
callback,
|
||||
std::ptr::addr_of_mut!(out) as *mut c_void,
|
||||
(&raw mut out) as *mut c_void,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -437,7 +437,7 @@ pub fn leak(&self) -> &T {
|
||||
#[inline(always)]
|
||||
pub fn leak(&self) -> &T {
|
||||
let guard = self.read();
|
||||
let ret = unsafe { &*std::ptr::addr_of!(*guard) };
|
||||
let ret = unsafe { &*(&raw const *guard) };
|
||||
std::mem::forget(guard);
|
||||
ret
|
||||
}
|
||||
|
@ -233,7 +233,7 @@ pub fn serialize(&self, tcx: TyCtxt<'_>, encoder: FileEncoder) -> FileEncodeResu
|
||||
|
||||
for (index, file) in files.iter().enumerate() {
|
||||
let index = SourceFileIndex(index as u32);
|
||||
let file_ptr: *const SourceFile = std::ptr::addr_of!(**file);
|
||||
let file_ptr: *const SourceFile = &raw const **file;
|
||||
file_to_file_index.insert(file_ptr, index);
|
||||
let source_file_id = EncodedSourceFileId::new(tcx, file);
|
||||
file_index_to_stable_id.insert(index, source_file_id);
|
||||
@ -827,7 +827,7 @@ pub struct CacheEncoder<'a, 'tcx> {
|
||||
impl<'a, 'tcx> CacheEncoder<'a, 'tcx> {
|
||||
#[inline]
|
||||
fn source_file_index(&mut self, source_file: Lrc<SourceFile>) -> SourceFileIndex {
|
||||
self.file_to_file_index[&std::ptr::addr_of!(*source_file)]
|
||||
self.file_to_file_index[&(&raw const *source_file)]
|
||||
}
|
||||
|
||||
/// Encode something with additional information that allows to do some
|
||||
|
@ -103,13 +103,13 @@ pub(super) fn from_arena<'tcx>(
|
||||
let mem = arena.dropless.alloc_raw(layout) as *mut RawList<H, T>;
|
||||
unsafe {
|
||||
// Write the header
|
||||
ptr::addr_of_mut!((*mem).skel.header).write(header);
|
||||
(&raw mut (*mem).skel.header).write(header);
|
||||
|
||||
// Write the length
|
||||
ptr::addr_of_mut!((*mem).skel.len).write(slice.len());
|
||||
(&raw mut (*mem).skel.len).write(slice.len());
|
||||
|
||||
// Write the elements
|
||||
ptr::addr_of_mut!((*mem).skel.data)
|
||||
(&raw mut (*mem).skel.data)
|
||||
.cast::<T>()
|
||||
.copy_from_nonoverlapping(slice.as_ptr(), slice.len());
|
||||
|
||||
@ -160,7 +160,7 @@ pub fn empty<'a>() -> &'a RawList<$header_ty, T> {
|
||||
|
||||
// SAFETY: `EMPTY` is sufficiently aligned to be an empty list for all
|
||||
// types with `align_of(T) <= align_of(MaxAlign)`, which we checked above.
|
||||
unsafe { &*(std::ptr::addr_of!(EMPTY) as *const RawList<$header_ty, T>) }
|
||||
unsafe { &*((&raw const EMPTY) as *const RawList<$header_ty, T>) }
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -238,7 +238,7 @@ fn deref(&self) -> &[T] {
|
||||
impl<H, T> AsRef<[T]> for RawList<H, T> {
|
||||
#[inline(always)]
|
||||
fn as_ref(&self) -> &[T] {
|
||||
let data_ptr = ptr::addr_of!(self.skel.data).cast::<T>();
|
||||
let data_ptr = (&raw const self.skel.data).cast::<T>();
|
||||
// SAFETY: `data_ptr` has the same provenance as `self` and can therefore
|
||||
// access the `self.skel.len` elements stored at `self.skel.data`.
|
||||
// Note that we specifically don't reborrow `&self.skel.data`, because that
|
||||
|
@ -255,7 +255,7 @@ pub fn run<F, T>(context: &dyn Context, f: F) -> Result<T, Error>
|
||||
if TLV.is_set() {
|
||||
Err(Error::from("StableMIR already running"))
|
||||
} else {
|
||||
let ptr: *const () = std::ptr::addr_of!(context) as _;
|
||||
let ptr: *const () = (&raw const context) as _;
|
||||
TLV.set(&Cell::new(ptr), || Ok(f()))
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user