I suppose that depends on how much concession we want to make to the hypothetical larger-than-address-space collection. Without such a collection, getting to this situation requires leaking an Arc, and thus leaking the associated ArcInner and contained object is exactly the same behavior that would occur if the refcount had and infinite range and there were no overflow. Thus it is fully recoverable in a way that makes the externally-visible behavior indistinguishable from the theoretical ideal. With such a collection, however, the user could theoretically create and then destroy more than 2^32 Arc clones, which theoretically wouldn’t leak with an count of infinite range, but would with my solution.
I’ll also note that the possible solution I gave would only have to check for a negative count in dec if such a collection were possible. Otherwise, it would only need to check in inc like your abort solution, as it would be impossible for the user to have 2^30 Arc instances lying around to be destroyed.
I’m a little torn. Using such a collection feels like quite an edge case, but on the other hand, Rusts memcpy move semantics make it feel like such a collection should be completely valid. The fact that Rust’s semantics allow the creation of such a collection with a safe interface seems really cool, and I’d hate to disallow it for the sake of the reference counting of a handful of types.