Rollup merge of #118890 - Amanieu:allocator-lifetime, r=Mark-Simulacrum
Clarify the lifetimes of allocations returned by the `Allocator` trait The previous definition (accidentally) disallowed the implementation of stack-based allocators whose memory would become invalid once the lifetime of the allocator type ended. This also ensures the validity of the following blanket implementation: ```rust impl<A: Allocator> Allocator for &'_ A {} ```
This commit is contained in:
commit
407de0ee33
1 changed files with 8 additions and 2 deletions
|
@ -95,8 +95,10 @@ impl fmt::Display for AllocError {
|
|||
/// # Safety
|
||||
///
|
||||
/// * Memory blocks returned from an allocator that are [*currently allocated*] must point to
|
||||
/// valid memory and retain their validity while they are [*currently allocated*] and at
|
||||
/// least one of the instance and all of its clones has not been dropped.
|
||||
/// valid memory and retain their validity while they are [*currently allocated*] and the shorter
|
||||
/// of:
|
||||
/// - the borrow-checker lifetime of the allocator type itself.
|
||||
/// - as long as at least one of the instance and all of its clones has not been dropped.
|
||||
///
|
||||
/// * copying, cloning, or moving the allocator must not invalidate memory blocks returned from this
|
||||
/// allocator. A copied or cloned allocator must behave like the same allocator, and
|
||||
|
@ -114,6 +116,10 @@ pub unsafe trait Allocator {
|
|||
/// The returned block may have a larger size than specified by `layout.size()`, and may or may
|
||||
/// not have its contents initialized.
|
||||
///
|
||||
/// The returned block of memory remains valid as long as it is [*currently allocated*] and the shorter of:
|
||||
/// - the borrow-checker lifetime of the allocator type itself.
|
||||
/// - as long as at the allocator and all its clones has not been dropped.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// Returning `Err` indicates that either memory is exhausted or `layout` does not meet
|
||||
|
|
Loading…
Add table
Reference in a new issue