diff options
| author | bors <bors@rust-lang.org> | 2023-09-16 03:40:20 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-09-16 03:40:20 +0000 |
| commit | 635c4a5e612b0ee8af6615635599702d3dce9906 (patch) | |
| tree | e6e5f854126129a3d5ea0b07379053aed15a83b4 /library/alloc/src/sync.rs | |
| parent | e81f85fe9eebf8a5ba21438fb188a59d54095697 (diff) | |
| parent | 4b1bc2701067d7b340d102d40227091c00447f48 (diff) | |
| download | rust-635c4a5e612b0ee8af6615635599702d3dce9906.tar.gz rust-635c4a5e612b0ee8af6615635599702d3dce9906.zip | |
Auto merge of #114494 - est31:extend_useless_ptr_null_checks, r=jackh726
Make useless_ptr_null_checks smarter about some std functions This teaches the `useless_ptr_null_checks` lint that some std functions can't ever return null pointers, because they need to point to valid data, get references as input, etc. This is achieved by introducing an `#[rustc_never_returns_null_ptr]` attribute and adding it to these std functions (gated behind bootstrap `cfg_attr`). Later on, the attribute could maybe be used to tell LLVM that the returned pointer is never null. I don't expect much impact of that though, as the functions are pretty shallow and usually the input data is already never null. Follow-up of PR #113657 Fixes #114442
Diffstat (limited to 'library/alloc/src/sync.rs')
| -rw-r--r-- | library/alloc/src/sync.rs | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/library/alloc/src/sync.rs b/library/alloc/src/sync.rs index d3b7558440c..c53e9a5dd7a 100644 --- a/library/alloc/src/sync.rs +++ b/library/alloc/src/sync.rs @@ -1454,6 +1454,7 @@ impl<T: ?Sized, A: Allocator> Arc<T, A> { /// ``` #[must_use = "losing the pointer will leak memory"] #[stable(feature = "rc_raw", since = "1.17.0")] + #[cfg_attr(not(bootstrap), rustc_never_returns_null_ptr)] pub fn into_raw(this: Self) -> *const T { let ptr = Self::as_ptr(&this); mem::forget(this); @@ -1478,6 +1479,7 @@ impl<T: ?Sized, A: Allocator> Arc<T, A> { /// ``` #[must_use] #[stable(feature = "rc_as_ptr", since = "1.45.0")] + #[cfg_attr(not(bootstrap), rustc_never_returns_null_ptr)] pub fn as_ptr(this: &Self) -> *const T { let ptr: *mut ArcInner<T> = NonNull::as_ptr(this.ptr); |
