1
Fork 0

Auto merge of #109971 - WaffleLapkin:yeet_ownership, r=Nilstrieb

Yeet `owning_ref`

Based on the discussions from https://github.com/rust-lang/rust/pull/109948

This replaces `owning_ref` with a far simpler & safer abstraction.

Fixes #109974
This commit is contained in:
bors 2023-04-08 01:08:26 +00:00
commit 0f0dc29264
13 changed files with 227 additions and 2012 deletions

View file

@ -7,9 +7,6 @@
//! while the serial versions degenerate straightforwardly to serial execution.
//! The operations include `join`, `parallel`, `par_iter`, and `par_for_each`.
//!
//! `rustc_erase_owner!` erases an `OwningRef` owner into `Erased` for the
//! serial version and `Erased + Send + Sync` for the parallel version.
//!
//! Types
//! -----
//! The parallel versions of types provide various kinds of synchronization,
@ -42,7 +39,7 @@
//!
//! [^2] `MTLockRef` is a typedef.
use crate::owning_ref::{Erased, OwningRef};
use crate::owned_slice::OwnedSlice;
use std::collections::HashMap;
use std::hash::{BuildHasher, Hash};
use std::ops::{Deref, DerefMut};
@ -57,18 +54,11 @@ mod vec;
cfg_if! {
if #[cfg(not(parallel_compiler))] {
pub auto trait Send {}
pub auto trait Sync {}
pub unsafe auto trait Send {}
pub unsafe auto trait Sync {}
impl<T> Send for T {}
impl<T> Sync for T {}
#[macro_export]
macro_rules! rustc_erase_owner {
($v:expr) => {
$v.erase_owner()
}
}
unsafe impl<T> Send for T {}
unsafe impl<T> Sync for T {}
use std::ops::Add;
@ -197,7 +187,7 @@ cfg_if! {
}
}
pub type MetadataRef = OwningRef<Box<dyn Erased>, [u8]>;
pub type MetadataRef = OwnedSlice;
pub use std::rc::Rc as Lrc;
pub use std::rc::Weak as Weak;
@ -380,20 +370,11 @@ cfg_if! {
});
}
pub type MetadataRef = OwningRef<Box<dyn Erased + Send + Sync>, [u8]>;
pub type MetadataRef = OwnedSlice;
/// This makes locks panic if they are already held.
/// It is only useful when you are running in a single thread
const ERROR_CHECKING: bool = false;
#[macro_export]
macro_rules! rustc_erase_owner {
($v:expr) => {{
let v = $v;
::rustc_data_structures::sync::assert_send_val(&v);
v.erase_send_sync_owner()
}}
}
}
}