From c6da31f5c041ca0d6385e1242134c9552092dc0f Mon Sep 17 00:00:00 2001 From: Taylor Cramer Date: Tue, 18 Dec 2018 11:23:33 -0800 Subject: [PATCH 1/3] Make Rc and Arc #[fundamenatal] --- src/liballoc/rc.rs | 1 + src/liballoc/sync.rs | 1 + 2 files changed, 2 insertions(+) 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, From 015599717c60ab2b77d0792e8fc150092c3626e8 Mon Sep 17 00:00:00 2001 From: Taylor Cramer Date: Tue, 18 Dec 2018 15:29:39 -0800 Subject: [PATCH 2/3] Fixup libserialize for Arc and Rc being #[fundamental] --- src/libserialize/serialize.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 {} From 69e465abffb6219dec892726591d4f5471f20dd6 Mon Sep 17 00:00:00 2001 From: Taylor Cramer Date: Tue, 18 Dec 2018 17:23:41 -0800 Subject: [PATCH 3/3] Adjust UI test output for Arc being #[fundamental] --- src/test/ui/issues/issue-41974.stderr | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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