diff --git a/src/liballoc/arc.rs b/src/liballoc/arc.rs index dba9b71c61cd4..45a47ae075e72 100644 --- a/src/liballoc/arc.rs +++ b/src/liballoc/arc.rs @@ -637,6 +637,11 @@ impl<T: ?Sized> Weak<T> { return None } + // See comments in `Arc::clone` for why we do this (for `mem::forget`). + if n > MAX_REFCOUNT { + unsafe { abort(); } + } + // Relaxed is valid for the same reason it is on Arc's Clone impl let old = inner.strong.compare_and_swap(n, n + 1, Relaxed); if old == n {