Skip to content

Commit a377893

Browse files
committed
Auto merge of #90291 - geeklint:loosen_weak_debug_bound, r=dtolnay
Loosen the bound on the Debug implementation of Weak. Both `rc::Weak<T>` and `sync::Weak<T>` currently require `T: Debug` in their own `Debug` implementations, but they don't currently use it; they only ever print a fixed string. A general implementation of Debug for Weak that actually attempts to upgrade and rely on the contents is unlikely in the future because it may have unbounded recursion in the presence of reference cycles, which Weak is commonly used in. (This was the justification for why the current implementation [was implemented the way it is](f0976e2)). When I brought it up [on the forum](https://internals.rust-lang.org/t/could-the-bound-on-weak-debug-be-relaxed/15504), it was suggested that, even if an implementation is specialized in the future that relies on the data stored within the Weak, it would likely rely on specialization anyway, and could therefore easily specialize on the Debug bound as well.
2 parents cc47b06 + ca7297b commit a377893

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

library/alloc/src/rc.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2561,7 +2561,7 @@ impl<T: ?Sized> Clone for Weak<T> {
25612561
}
25622562

25632563
#[stable(feature = "rc_weak", since = "1.4.0")]
2564-
impl<T: ?Sized + fmt::Debug> fmt::Debug for Weak<T> {
2564+
impl<T: ?Sized> fmt::Debug for Weak<T> {
25652565
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25662566
write!(f, "(Weak)")
25672567
}

library/alloc/src/sync.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Weak<U>> for Weak<T> {}
312312
impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Weak<U>> for Weak<T> {}
313313

314314
#[stable(feature = "arc_weak", since = "1.4.0")]
315-
impl<T: ?Sized + fmt::Debug> fmt::Debug for Weak<T> {
315+
impl<T: ?Sized> fmt::Debug for Weak<T> {
316316
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
317317
write!(f, "(Weak)")
318318
}

0 commit comments

Comments
 (0)