@@ -180,10 +180,9 @@ impl<T> [T] {
180180/// This sort is stable (i.e., does not reorder equal elements) and *O*(*n* \* log(*n*))
181181/// worst-case.
182182///
183- /// If the implementation of [`Ord`] for `T` does not implement a [total order] the resulting
184- /// order of elements in the slice is unspecified. All original elements will remain in the
185- /// slice and any possible modifications via interior mutability are observed in the input. Same
186- /// is true if the implementation of [`Ord`] for `T` panics.
183+ /// If the implementation of [`Ord`] for `T` does not implement a [total order], the function
184+ /// may panic; even if the function exits normally, the resulting order of elements in the slice
185+ /// is unspecified. See also the note on panicking below.
187186///
188187/// When applicable, unstable sorting is preferred because it is generally faster than stable
189188/// sorting and it doesn't allocate auxiliary memory. See
@@ -212,7 +211,15 @@ impl<T> [T] {
212211///
213212/// # Panics
214213///
215- /// May panic if the implementation of [`Ord`] for `T` does not implement a [total order].
214+ /// May panic if the implementation of [`Ord`] for `T` does not implement a [total order], or if
215+ /// the [`Ord`] implementation itself panics.
216+ ///
217+ /// All safe functions on slices preserve the invariant that even if the function panics, all
218+ /// original elements will remain in the slice and any possible modifications via interior
219+ /// mutability are observed in the input. This ensures that recovery code (for instance inside
220+ /// of a `Drop` or following a `catch_unwind`) will still have access to all the original
221+ /// elements. For instance, if the slice belongs to a `Vec`, the `Vec::drop` method will be able
222+ /// to dispose of all contained elements.
216223///
217224/// # Examples
218225///
@@ -241,10 +248,9 @@ impl<T> [T] {
241248/// This sort is stable (i.e., does not reorder equal elements) and *O*(*n* \* log(*n*))
242249/// worst-case.
243250///
244- /// If the comparison function `compare` does not implement a [total order] the resulting order
245- /// of elements in the slice is unspecified. All original elements will remain in the slice and
246- /// any possible modifications via interior mutability are observed in the input. Same is true
247- /// if `compare` panics.
251+ /// If the comparison function `compare` does not implement a [total order], the function may
252+ /// panic; even if the function exits normally, the resulting order of elements in the slice is
253+ /// unspecified. See also the note on panicking below.
248254///
249255/// For example `|a, b| (a - b).cmp(a)` is a comparison function that is neither transitive nor
250256/// reflexive nor total, `a < b < c < a` with `a = 1, b = 2, c = 3`. For more information and
@@ -263,7 +269,14 @@ impl<T> [T] {
263269///
264270/// # Panics
265271///
266- /// May panic if `compare` does not implement a [total order].
272+ /// May panic if `compare` does not implement a [total order], or if `compare` itself panics.
273+ ///
274+ /// All safe functions on slices preserve the invariant that even if the function panics, all
275+ /// original elements will remain in the slice and any possible modifications via interior
276+ /// mutability are observed in the input. This ensures that recovery code (for instance inside
277+ /// of a `Drop` or following a `catch_unwind`) will still have access to all the original
278+ /// elements. For instance, if the slice belongs to a `Vec`, the `Vec::drop` method will be able
279+ /// to dispose of all contained elements.
267280///
268281/// # Examples
269282///
@@ -295,10 +308,9 @@ impl<T> [T] {
295308/// This sort is stable (i.e., does not reorder equal elements) and *O*(*m* \* *n* \* log(*n*))
296309/// worst-case, where the key function is *O*(*m*).
297310///
298- /// If the implementation of [`Ord`] for `K` does not implement a [total order] the resulting
299- /// order of elements in the slice is unspecified. All original elements will remain in the
300- /// slice and any possible modifications via interior mutability are observed in the input. Same
301- /// is true if the implementation of [`Ord`] for `K` panics.
311+ /// If the implementation of [`Ord`] for `K` does not implement a [total order], the function
312+ /// may panic; even if the function exits normally, the resulting order of elements in the slice
313+ /// is unspecified. See also the note on panicking below.
302314///
303315/// # Current implementation
304316///
@@ -313,7 +325,15 @@ impl<T> [T] {
313325///
314326/// # Panics
315327///
316- /// May panic if the implementation of [`Ord`] for `K` does not implement a [total order].
328+ /// May panic if the implementation of [`Ord`] for `K` does not implement a [total order], or if
329+ /// the [`Ord`] implementation or the key-function `f` panics.
330+ ///
331+ /// All safe functions on slices preserve the invariant that even if the function panics, all
332+ /// original elements will remain in the slice and any possible modifications via interior
333+ /// mutability are observed in the input. This ensures that recovery code (for instance inside
334+ /// of a `Drop` or following a `catch_unwind`) will still have access to all the original
335+ /// elements. For instance, if the slice belongs to a `Vec`, the `Vec::drop` method will be able
336+ /// to dispose of all contained elements.
317337///
318338/// # Examples
319339///
@@ -347,10 +367,9 @@ impl<T> [T] {
347367/// storage to remember the results of key evaluation. The order of calls to the key function is
348368/// unspecified and may change in future versions of the standard library.
349369///
350- /// If the implementation of [`Ord`] for `K` does not implement a [total order] the resulting
351- /// order of elements in the slice is unspecified. All original elements will remain in the
352- /// slice and any possible modifications via interior mutability are observed in the input. Same
353- /// is true if the implementation of [`Ord`] for `K` panics.
370+ /// If the implementation of [`Ord`] for `K` does not implement a [total order], the function
371+ /// may panic; even if the function exits normally, the resulting order of elements in the slice
372+ /// is unspecified. See also the note on panicking below.
354373///
355374/// For simple key functions (e.g., functions that are property accesses or basic operations),
356375/// [`sort_by_key`](slice::sort_by_key) is likely to be faster.
@@ -369,7 +388,15 @@ impl<T> [T] {
369388///
370389/// # Panics
371390///
372- /// May panic if the implementation of [`Ord`] for `K` does not implement a [total order].
391+ /// May panic if the implementation of [`Ord`] for `K` does not implement a [total order], or if
392+ /// the [`Ord`] implementation panics.
393+ ///
394+ /// All safe functions on slices preserve the invariant that even if the function panics, all
395+ /// original elements will remain in the slice and any possible modifications via interior
396+ /// mutability are observed in the input. This ensures that recovery code (for instance inside
397+ /// of a `Drop` or following a `catch_unwind`) will still have access to all the original
398+ /// elements. For instance, if the slice belongs to a `Vec`, the `Vec::drop` method will be able
399+ /// to dispose of all contained elements.
373400///
374401/// # Examples
375402///
0 commit comments