Skip to content

Commit 0c61ce2

Browse files
committed
?Sized bounds for rc::Weak::as_ptr and friends
1 parent 7289383 commit 0c61ce2

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

library/alloc/src/rc.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,7 +1721,21 @@ impl<T> Weak<T> {
17211721
pub fn new() -> Weak<T> {
17221722
Weak { ptr: NonNull::new(usize::MAX as *mut RcBox<T>).expect("MAX is not 0") }
17231723
}
1724+
}
1725+
1726+
pub(crate) fn is_dangling<T: ?Sized>(ptr: NonNull<T>) -> bool {
1727+
let address = ptr.as_ptr() as *mut () as usize;
1728+
address == usize::MAX
1729+
}
1730+
1731+
/// Helper type to allow accessing the reference counts without
1732+
/// making any assertions about the data field.
1733+
struct WeakInner<'a> {
1734+
weak: &'a Cell<usize>,
1735+
strong: &'a Cell<usize>,
1736+
}
17241737

1738+
impl<T: ?Sized> Weak<T> {
17251739
/// Returns a raw pointer to the object `T` pointed to by this `Weak<T>`.
17261740
///
17271741
/// The pointer is valid only if there are some strong references. The pointer may be dangling,
@@ -1854,21 +1868,7 @@ impl<T> Weak<T> {
18541868
// SAFETY: we now have recovered the original Weak pointer, so can create the Weak.
18551869
Weak { ptr: unsafe { NonNull::new_unchecked(ptr) } }
18561870
}
1857-
}
1858-
1859-
pub(crate) fn is_dangling<T: ?Sized>(ptr: NonNull<T>) -> bool {
1860-
let address = ptr.as_ptr() as *mut () as usize;
1861-
address == usize::MAX
1862-
}
1863-
1864-
/// Helper type to allow accessing the reference counts without
1865-
/// making any assertions about the data field.
1866-
struct WeakInner<'a> {
1867-
weak: &'a Cell<usize>,
1868-
strong: &'a Cell<usize>,
1869-
}
18701871

1871-
impl<T: ?Sized> Weak<T> {
18721872
/// Attempts to upgrade the `Weak` pointer to an [`Rc`], delaying
18731873
/// dropping of the inner value if successful.
18741874
///

0 commit comments

Comments
 (0)