diff --git a/src/librustc/ty/layout.rs b/src/librustc/ty/layout.rs index e14a78a8c44..c67e6a0a13e 100644 --- a/src/librustc/ty/layout.rs +++ b/src/librustc/ty/layout.rs @@ -2529,8 +2529,9 @@ where attrs.pointee_align = Some(pointee.align); // `Box` (`UniqueBorrowed`) are not necessarily dereferencable - // for the entire duration of the function, so set their size to 0. - attrs.pointee_size = match kind { + // for the entire duration of the function as they can be deallocated + // any time. Set their valid size to 0. + attrs.pointee_size = match kind { PointerKind::UniqueOwned => Size::ZERO, _ => pointee.size }; diff --git a/src/librustc_target/abi/call/mod.rs b/src/librustc_target/abi/call/mod.rs index 1b55676fe4f..3a3ad763790 100644 --- a/src/librustc_target/abi/call/mod.rs +++ b/src/librustc_target/abi/call/mod.rs @@ -69,7 +69,8 @@ mod attr_impl { #[derive(Copy, Clone, PartialEq, Eq, Debug)] pub struct ArgAttributes { pub regular: ArgAttribute, - /// The dereferenceable size of the pointee. + /// The minimum size of the pointee, guaranteed to be valid for the duration of the whole call + /// (corresponding to LLVM's dereferenceable and dereferenceable_or_null attributes). pub pointee_size: Size, pub pointee_align: Option }