about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libstd/sync/arc.rs12
-rw-r--r--src/libstd/ty.rs1
2 files changed, 8 insertions, 5 deletions
diff --git a/src/libstd/sync/arc.rs b/src/libstd/sync/arc.rs
index 883e81355e1..92974005305 100644
--- a/src/libstd/sync/arc.rs
+++ b/src/libstd/sync/arc.rs
@@ -28,6 +28,7 @@ use ops::Drop;
 use ptr::RawPtr;
 use sync::atomics::{fence, AtomicUint, Relaxed, Acquire, Release};
 use slice;
+use ty::Unsafe;
 
 /// An atomically reference counted pointer.
 ///
@@ -39,11 +40,14 @@ pub struct UnsafeArc<T> {
 
 struct ArcData<T> {
     count: AtomicUint,
-    data: T,
+    data: Unsafe<T>,
 }
 
 unsafe fn new_inner<T: Send>(data: T, refcount: uint) -> *mut ArcData<T> {
-    let data = ~ArcData { count: AtomicUint::new(refcount), data: data };
+    let data = ~ArcData {
+                    count: AtomicUint::new(refcount),
+                    data: Unsafe::new(data)
+                 };
     cast::transmute(data)
 }
 
@@ -82,7 +86,7 @@ impl<T: Send> UnsafeArc<T> {
         unsafe {
             // FIXME(#12049): this needs some sort of debug assertion
             if cfg!(test) { assert!((*self.data).count.load(Relaxed) > 0); }
-            return &mut (*self.data).data as *mut T;
+            return (*self.data).data.get();
         }
     }
 
@@ -93,7 +97,7 @@ impl<T: Send> UnsafeArc<T> {
         unsafe {
             // FIXME(#12049): this needs some sort of debug assertion
             if cfg!(test) { assert!((*self.data).count.load(Relaxed) > 0); }
-            return &(*self.data).data as *T;
+            return (*self.data).data.get() as *T;
         }
     }
 
diff --git a/src/libstd/ty.rs b/src/libstd/ty.rs
index f06ccad7a28..344235053f3 100644
--- a/src/libstd/ty.rs
+++ b/src/libstd/ty.rs
@@ -65,7 +65,6 @@ pub struct Unsafe<T> {
     marker1: marker::InvariantType<T>
 }
 
-
 impl<T> Unsafe<T> {
 
     /// Static constructor