diff options
| author | Mara Bos <m-ou.se@m-ou.se> | 2021-06-27 12:41:50 +0000 |
|---|---|---|
| committer | Mara Bos <m-ou.se@m-ou.se> | 2021-07-28 14:34:36 +0200 |
| commit | 3f6dc9a8abe9ffd804fed2ddaabb1c67de4c8fbd (patch) | |
| tree | 226343744c4d375c6fcb3841a3a893405e57e253 /library/core/src | |
| parent | eba3228b2a9875d268ff3990903d04e19f6cdb0c (diff) | |
| download | rust-3f6dc9a8abe9ffd804fed2ddaabb1c67de4c8fbd.tar.gz rust-3f6dc9a8abe9ffd804fed2ddaabb1c67de4c8fbd.zip | |
Add #[track_caller] for some function in core::mem.
These functions can panic for some types. This makes the panic point to the code that calls e.g. mem::uninitialized(), instead of inside the definition of mem::uninitialized.
Diffstat (limited to 'library/core/src')
| -rw-r--r-- | library/core/src/mem/maybe_uninit.rs | 3 | ||||
| -rw-r--r-- | library/core/src/mem/mod.rs | 2 |
2 files changed, 5 insertions, 0 deletions
diff --git a/library/core/src/mem/maybe_uninit.rs b/library/core/src/mem/maybe_uninit.rs index d3ebc1cebb6..9c88a623361 100644 --- a/library/core/src/mem/maybe_uninit.rs +++ b/library/core/src/mem/maybe_uninit.rs @@ -619,6 +619,7 @@ impl<T> MaybeUninit<T> { #[rustc_const_unstable(feature = "const_maybe_uninit_assume_init", issue = "none")] #[inline(always)] #[rustc_diagnostic_item = "assume_init"] + #[track_caller] pub const unsafe fn assume_init(self) -> T { // SAFETY: the caller must guarantee that `self` is initialized. // This also means that `self` must be a `value` variant. @@ -690,6 +691,7 @@ impl<T> MaybeUninit<T> { #[unstable(feature = "maybe_uninit_extra", issue = "63567")] #[rustc_const_unstable(feature = "maybe_uninit_extra", issue = "63567")] #[inline(always)] + #[track_caller] pub const unsafe fn assume_init_read(&self) -> T { // SAFETY: the caller must guarantee that `self` is initialized. // Reading from `self.as_ptr()` is safe since `self` should be initialized. @@ -937,6 +939,7 @@ impl<T> MaybeUninit<T> { /// ``` #[unstable(feature = "maybe_uninit_array_assume_init", issue = "80908")] #[inline(always)] + #[track_caller] pub unsafe fn array_assume_init<const N: usize>(array: [Self; N]) -> [T; N] { // SAFETY: // * The caller guarantees that all elements of the array are initialized diff --git a/library/core/src/mem/mod.rs b/library/core/src/mem/mod.rs index 2c75de39ffa..aeb5d238162 100644 --- a/library/core/src/mem/mod.rs +++ b/library/core/src/mem/mod.rs @@ -622,6 +622,7 @@ pub const fn needs_drop<T>() -> bool { #[allow(deprecated_in_future)] #[allow(deprecated)] #[rustc_diagnostic_item = "mem_zeroed"] +#[track_caller] pub unsafe fn zeroed<T>() -> T { // SAFETY: the caller must guarantee that an all-zero value is valid for `T`. unsafe { @@ -657,6 +658,7 @@ pub unsafe fn zeroed<T>() -> T { #[allow(deprecated_in_future)] #[allow(deprecated)] #[rustc_diagnostic_item = "mem_uninitialized"] +#[track_caller] pub unsafe fn uninitialized<T>() -> T { // SAFETY: the caller must guarantee that an unitialized value is valid for `T`. unsafe { |
