diff --git a/src/libstd/cleanup.rs b/src/libstd/cleanup.rs index 2ea10b09c8ec1c6b25a41d19a8d7a76028ea568e..da24fef157858c12e9de9ca5a96a78a276ced0a7 100644 --- a/src/libstd/cleanup.rs +++ b/src/libstd/cleanup.rs @@ -13,7 +13,6 @@ use libc::c_void; use ptr::{mut_null}; use repr::BoxRepr; -use cast::transmute; use unstable::intrinsics::TyDesc; type DropGlue<'self> = &'self fn(**TyDesc, *c_void); @@ -40,18 +39,17 @@ unsafe fn each_live_alloc(read_next_before: bool, let box = local_heap::live_allocs(); let mut box: *mut BoxRepr = transmute(box); while box != mut_null() { - let next_before = transmute((*box).header.next); - let uniq = - (*box).header.ref_count == managed::raw::RC_MANAGED_UNIQUE; + let next_before = (*box).next; + let uniq = (*box).ref_count == managed::RC_MANAGED_UNIQUE; - if !f(box, uniq) { + if !f(box as *mut raw::Box<()>, uniq) { return false; } if read_next_before { box = next_before; } else { - box = transmute((*box).header.next); + box = (*box).next; } } return true; @@ -113,9 +111,9 @@ pub unsafe fn annihilate() { // callback, as the original value may have been freed. for each_live_alloc(false) |box, uniq| { if !uniq { - let tydesc: *TyDesc = transmute((*box).header.type_desc); - let data = transmute(&(*box).data); - ((*tydesc).drop_glue)(data); + let tydesc = (*box).type_desc; + let data = &(*box).data as *(); + ((*tydesc).drop_glue)(data as *i8); } } @@ -130,7 +128,7 @@ pub unsafe fn annihilate() { stats.n_bytes_freed += (*((*box).header.type_desc)).size + sys::size_of::(); - local_free(transmute(box)); + local_free(box as *u8); } } diff --git a/src/libstd/gc.rs b/src/libstd/gc.rs index 911fb5625e58864d52b15e49e23c14d82944a11a..4feec26a2d982e4b923df0b67a46e95a530baee1 100644 --- a/src/libstd/gc.rs +++ b/src/libstd/gc.rs @@ -74,14 +74,14 @@ pub mod rustrt { } unsafe fn bump(ptr: *T, count: uint) -> *U { - return cast::transmute(ptr::offset(ptr, count)); + return ptr::offset(ptr, count) as *U; } unsafe fn align_to_pointer(ptr: *T) -> *T { let align = sys::min_align_of::<*T>(); - let ptr: uint = cast::transmute(ptr); + let ptr = ptr as uint; let ptr = (ptr + (align - 1)) & -align; - return cast::transmute(ptr); + return ptr as *T; } unsafe fn get_safe_point_count() -> uint { @@ -126,8 +126,8 @@ unsafe fn is_safe_point(pc: *Word) -> Option { // Walks the list of roots for the given safe point, and calls visitor // on each root. unsafe fn _walk_safe_point(fp: *Word, sp: SafePoint, visitor: Visitor) -> bool { - let fp_bytes: *u8 = cast::transmute(fp); - let sp_meta: *u32 = cast::transmute(sp.sp_meta); + let fp_bytes = fp as *u8; + let sp_meta = sp.sp_meta as *u32; let num_stack_roots = *sp_meta as uint; let num_reg_roots = *ptr::offset(sp_meta, 1) as uint; @@ -173,9 +173,9 @@ unsafe fn walk_safe_point(fp: *Word, sp: SafePoint, visitor: Visitor) -> bool { // Is fp contained in segment? unsafe fn is_frame_in_segment(fp: *Word, segment: *StackSegment) -> bool { - let begin: Word = cast::transmute(segment); - let end: Word = cast::transmute((*segment).end); - let frame: Word = cast::transmute(fp); + let begin = segment as Word; + let end = (*segment).end as Word; + let frame = fp as Word; return begin <= frame && frame <= end; }