diff --git a/src/liballoc/rc.rs b/src/liballoc/rc.rs index 52ad30c411a10..59b89acbe2008 100644 --- a/src/liballoc/rc.rs +++ b/src/liballoc/rc.rs @@ -283,6 +283,7 @@ struct RcBox { /// [get_mut]: #method.get_mut #[cfg_attr(not(test), lang = "rc")] #[stable(feature = "rust1", since = "1.0.0")] +#[fundamental] pub struct Rc { ptr: NonNull>, phantom: PhantomData, diff --git a/src/liballoc/sync.rs b/src/liballoc/sync.rs index 111459d12a4df..31e81d8e6ee7a 100644 --- a/src/liballoc/sync.rs +++ b/src/liballoc/sync.rs @@ -200,6 +200,7 @@ const MAX_REFCOUNT: usize = (isize::MAX) as usize; /// [rc_examples]: ../../std/rc/index.html#examples #[cfg_attr(not(test), lang = "arc")] #[stable(feature = "rust1", since = "1.0.0")] +#[fundamental] pub struct Arc { ptr: NonNull>, phantom: PhantomData, diff --git a/src/libserialize/serialize.rs b/src/libserialize/serialize.rs index 6f1652cdee06f..69bda5bc77684 100644 --- a/src/libserialize/serialize.rs +++ b/src/libserialize/serialize.rs @@ -921,4 +921,7 @@ impl Decodable for T { impl<'a, T: ?Sized + Encodable> UseSpecializedEncodable for &'a T {} impl UseSpecializedEncodable for Box {} impl UseSpecializedDecodable for Box {} - +impl UseSpecializedEncodable for Rc {} +impl UseSpecializedDecodable for Rc {} +impl UseSpecializedEncodable for Arc {} +impl UseSpecializedDecodable for Arc {} diff --git a/src/test/ui/issues/issue-41974.stderr b/src/test/ui/issues/issue-41974.stderr index d6d4f7b55151f..f6e53479759f0 100644 --- a/src/test/ui/issues/issue-41974.stderr +++ b/src/test/ui/issues/issue-41974.stderr @@ -1,13 +1,13 @@ -error[E0119]: conflicting implementations of trait `std::ops::Drop` for type `std::boxed::Box<_>`: +error[E0119]: conflicting implementations of trait `std::ops::Drop` for type `std::sync::Arc<_>`: --> $DIR/issue-41974.rs:17:1 | LL | impl Drop for T where T: A { //~ ERROR E0119 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: conflicting implementation in crate `alloc`: - - impl std::ops::Drop for std::boxed::Box + - impl std::ops::Drop for std::sync::Arc where T: ?Sized; - = note: downstream crates may implement trait `A` for type `std::boxed::Box<_>` + = note: downstream crates may implement trait `A` for type `std::sync::Arc<_>` error[E0120]: the Drop trait may only be implemented on structures --> $DIR/issue-41974.rs:17:18