@@ -124,8 +124,8 @@ pub unsafe trait GlobalAlloc {
124
124
///
125
125
/// # Safety
126
126
///
127
- /// This function is unsafe because undefined behavior can result
128
- /// if the caller does not ensure that `layout` has non-zero size .
127
+ /// `layout` must have non-zero size. Attempting to allocate for a zero-sized `layout` may
128
+ /// result in undefined behavior .
129
129
///
130
130
/// (Extension subtraits might provide more specific bounds on
131
131
/// behavior, e.g., guarantee a sentinel address or a null pointer
@@ -156,14 +156,14 @@ pub unsafe trait GlobalAlloc {
156
156
///
157
157
/// # Safety
158
158
///
159
- /// This function is unsafe because undefined behavior can result
160
- /// if the caller does not ensure all of the following:
159
+ /// The caller must ensure:
161
160
///
162
- /// * `ptr` must denote a block of memory currently allocated via
163
- /// this allocator,
161
+ /// * `ptr` is a block of memory currently allocated via this allocator and,
164
162
///
165
- /// * `layout` must be the same layout that was used
166
- /// to allocate that block of memory.
163
+ /// * `layout` is the same layout that was used to allocate that block of
164
+ /// memory.
165
+ ///
166
+ /// Otherwise undefined behavior can result.
167
167
#[ stable( feature = "global_alloc" , since = "1.28.0" ) ]
168
168
unsafe fn dealloc ( & self , ptr : * mut u8 , layout : Layout ) ;
169
169
@@ -172,7 +172,8 @@ pub unsafe trait GlobalAlloc {
172
172
///
173
173
/// # Safety
174
174
///
175
- /// This function is unsafe for the same reasons that `alloc` is.
175
+ /// The caller has to ensure that `layout` has non-zero size. Like `alloc`
176
+ /// zero sized `layout` can result in undefined behaviour.
176
177
/// However the allocated block of memory is guaranteed to be initialized.
177
178
///
178
179
/// # Errors
@@ -220,20 +221,21 @@ pub unsafe trait GlobalAlloc {
220
221
///
221
222
/// # Safety
222
223
///
223
- /// This function is unsafe because undefined behavior can result
224
- /// if the caller does not ensure all of the following:
224
+ /// The caller must ensure that:
225
225
///
226
- /// * `ptr` must be currently allocated via this allocator,
226
+ /// * `ptr` is allocated via this allocator,
227
227
///
228
- /// * `layout` must be the same layout that was used
228
+ /// * `layout` is the same layout that was used
229
229
/// to allocate that block of memory,
230
230
///
231
- /// * `new_size` must be greater than zero.
231
+ /// * `new_size` is greater than zero.
232
232
///
233
233
/// * `new_size`, when rounded up to the nearest multiple of `layout.align()`,
234
- /// must not overflow `isize` (i.e., the rounded value must be less than or
234
+ /// does not overflow `isize` (i.e., the rounded value must be less than or
235
235
/// equal to `isize::MAX`).
236
236
///
237
+ /// If these are not followed, undefined behaviour can result.
238
+ ///
237
239
/// (Extension subtraits might provide more specific bounds on
238
240
/// behavior, e.g., guarantee a sentinel address or a null pointer
239
241
/// in response to a zero-size allocation request.)
0 commit comments