Add rustc_on_unimplemented on Sync for cell types
Suggest using a lock instead.
This commit is contained in:
@@ -469,6 +469,62 @@ pub macro Copy($item:item) {
|
||||
#[cfg_attr(not(test), rustc_diagnostic_item = "Sync")]
|
||||
#[lang = "sync"]
|
||||
#[rustc_on_unimplemented(
|
||||
on(
|
||||
_Self = "std::cell::OnceCell<T>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::OnceLock` instead"
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<u8>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU8` instead",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<u16>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU16` instead",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<u32>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU32` instead",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<u64>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU64` instead",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<usize>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicUsize` instead",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<i8>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI8` instead",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<i16>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI16` instead",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<i32>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32` instead",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<i64>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI64` instead",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<isize>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicIsize` instead",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<bool>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicBool` instead",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::Cell<T>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock`",
|
||||
),
|
||||
on(
|
||||
_Self = "std::cell::RefCell<T>",
|
||||
note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` instead",
|
||||
),
|
||||
message = "`{Self}` cannot be shared between threads safely",
|
||||
label = "`{Self}` cannot be shared between threads safely"
|
||||
)]
|
||||
|
||||
Reference in New Issue
Block a user