From 6a11e17b6bf64f1676a69d45edd336c8697a931b Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 18 Oct 2013 09:22:03 -0700 Subject: [PATCH] Fix an off-by-one in managed::refcount This fixes a bug I accidentally introduced in #9922 --- src/libstd/managed.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/libstd/managed.rs b/src/libstd/managed.rs index a27c8aa4a76..7322f0b0647 100644 --- a/src/libstd/managed.rs +++ b/src/libstd/managed.rs @@ -21,7 +21,7 @@ pub static RC_IMMORTAL : uint = 0x77777777; #[inline] pub fn refcount(t: @T) -> uint { use unstable::raw::Repr; - unsafe { (*t.repr()).ref_count } + unsafe { (*t.repr()).ref_count - 1 } } /// Determine if two shared boxes point to the same object @@ -110,3 +110,14 @@ fn test() { assert!((!ptr_eq::(x, y))); assert!((!ptr_eq::(y, x))); } + +#[test] +fn refcount_test() { + use clone::Clone; + + let x = @3; + assert_eq!(refcount(x), 1); + let y = x.clone(); + assert_eq!(refcount(x), 2); + assert_eq!(refcount(y), 2); +}