only set noalias on Box with the global allocator
This commit is contained in:
parent
9277766840
commit
804eeff180
@ -525,8 +525,11 @@ pub struct Unique<T: ?Sized> {
|
|||||||
impl<T: ?Sized, U: ?Sized> CoerceUnsized<Unique<U>> for Unique<T> where T: Unsize<U> {}
|
impl<T: ?Sized, U: ?Sized> CoerceUnsized<Unique<U>> for Unique<T> where T: Unsize<U> {}
|
||||||
impl<T: ?Sized, U: ?Sized> DispatchFromDyn<Unique<U>> for Unique<T> where T: Unsize<U> {}
|
impl<T: ?Sized, U: ?Sized> DispatchFromDyn<Unique<U>> for Unique<T> where T: Unsize<U> {}
|
||||||
|
|
||||||
|
#[lang = "global_alloc_ty"]
|
||||||
|
pub struct Global;
|
||||||
|
|
||||||
#[lang = "owned_box"]
|
#[lang = "owned_box"]
|
||||||
pub struct Box<T: ?Sized, A = ()>(Unique<T>, A);
|
pub struct Box<T: ?Sized, A = Global>(Unique<T>, A);
|
||||||
|
|
||||||
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Box<U>> for Box<T> {}
|
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Box<U>> for Box<T> {}
|
||||||
|
|
||||||
@ -536,7 +539,7 @@ pub fn new(val: T) -> Box<T> {
|
|||||||
let size = intrinsics::size_of::<T>();
|
let size = intrinsics::size_of::<T>();
|
||||||
let ptr = libc::malloc(size);
|
let ptr = libc::malloc(size);
|
||||||
intrinsics::copy(&val as *const T as *const u8, ptr, size);
|
intrinsics::copy(&val as *const T as *const u8, ptr, size);
|
||||||
Box(Unique { pointer: NonNull(ptr as *const T), _marker: PhantomData }, ())
|
Box(Unique { pointer: NonNull(ptr as *const T), _marker: PhantomData }, Global)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -74,10 +74,6 @@ fn unsize_ptr<'tcx>(
|
|||||||
| (&ty::RawPtr(ty::TypeAndMut { ty: a, .. }), &ty::RawPtr(ty::TypeAndMut { ty: b, .. })) => {
|
| (&ty::RawPtr(ty::TypeAndMut { ty: a, .. }), &ty::RawPtr(ty::TypeAndMut { ty: b, .. })) => {
|
||||||
(src, unsized_info(fx, *a, *b, old_info))
|
(src, unsized_info(fx, *a, *b, old_info))
|
||||||
}
|
}
|
||||||
(&ty::Adt(def_a, _), &ty::Adt(def_b, _)) if def_a.is_box() && def_b.is_box() => {
|
|
||||||
let (a, b) = (src_layout.ty.boxed_ty(), dst_layout.ty.boxed_ty());
|
|
||||||
(src, unsized_info(fx, a, b, old_info))
|
|
||||||
}
|
|
||||||
(&ty::Adt(def_a, _), &ty::Adt(def_b, _)) => {
|
(&ty::Adt(def_a, _), &ty::Adt(def_b, _)) => {
|
||||||
assert_eq!(def_a, def_b);
|
assert_eq!(def_a, def_b);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user