From: Mark Rousskov Date: Sun, 22 Dec 2019 01:35:41 +0000 (-0500) Subject: Warn against relying on ?Sized being last X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=a34c2677afeee2747d680536f302a8c5665a65f4;p=rust.git Warn against relying on ?Sized being last --- diff --git a/src/liballoc/rc.rs b/src/liballoc/rc.rs index 42a278de98b..00c4b5462be 100644 --- a/src/liballoc/rc.rs +++ b/src/liballoc/rc.rs @@ -2106,6 +2106,8 @@ impl Unpin for Rc { } unsafe fn data_offset(ptr: *const T) -> isize { // Align the unsized value to the end of the `RcBox`. // Because it is ?Sized, it will always be the last field in memory. + // Note: This is a detail of the current implementation of the compiler, + // and is not a guaranteed language detail. Do not rely on it outside of std. data_offset_align(align_of_val(&*ptr)) } diff --git a/src/liballoc/sync.rs b/src/liballoc/sync.rs index a99564c0dac..37995a7ec79 100644 --- a/src/liballoc/sync.rs +++ b/src/liballoc/sync.rs @@ -2161,6 +2161,8 @@ impl Unpin for Arc { } unsafe fn data_offset(ptr: *const T) -> isize { // Align the unsized value to the end of the `ArcInner`. // Because it is `?Sized`, it will always be the last field in memory. + // Note: This is a detail of the current implementation of the compiler, + // and is not a guaranteed language detail. Do not rely on it outside of std. data_offset_align(align_of_val(&*ptr)) }