rust/library/alloc/src
bors 757b8efed4 Auto merge of #120712 - compiler-errors:async-closures-harmonize, r=oli-obk
Harmonize `AsyncFn` implementations, make async closures conditionally impl `Fn*` traits

This PR implements several changes to the built-in and libcore-provided implementations of `Fn*` and `AsyncFn*` to address two problems:
1. async closures do not implement the `Fn*` family traits, leading to breakage: https://crater-reports.s3.amazonaws.com/pr-120361/index.html
2. *references* to async closures do not implement `AsyncFn*`, as a consequence of the existing blanket impls of the shape `AsyncFn for F where F: Fn, F::Output: Future`.

In order to fix (1.), we implement `Fn` traits appropriately for async closures. It turns out that async closures can:
* always implement `FnOnce`, meaning that they're drop-in compatible with `FnOnce`-bound combinators like `Option::map`.
* conditionally implement `Fn`/`FnMut` if they have no captures, which means that existing usages of async closures should *probably* work without breakage (crater checking this: https://github.com/rust-lang/rust/pull/120712#issuecomment-1930587805).

In order to fix (2.), we make all of the built-in callables implement `AsyncFn*` via built-in impls, and instead adjust the blanket impls for `AsyncFn*` provided by libcore to match the blanket impls for `Fn*`.
2024-02-10 07:15:15 +00:00
..
alloc run alloc benchmarks in Miri and fix UB 2022-11-07 10:34:04 +01:00
boxed Remove no-longer-needed allow(dead_code) from the standard library 2024-01-18 13:14:42 -05:00
collections Rollup merge of #118208 - Amanieu:btree_cursor2, r=dtolnay 2024-01-25 17:39:26 +01:00
ffi Document From<&CStr> for CString 2024-01-28 16:53:57 -05:00
raw_vec add more niches to rawvec 2023-12-11 23:38:48 +01:00
rc remove redundant imports 2023-12-10 10:56:22 +08:00
slice ignore core, alloc and test tests that require unwinding on panic=abort 2023-06-13 15:53:24 +02:00
sync Fix some Arc allocator leaks 2024-01-28 18:33:34 +01:00
testing Share testing utilities with non-btree test cases 2022-05-02 10:07:50 +02:00
vec Auto merge of #120676 - Mark-Simulacrum:bootstrap-bump, r=clubby789 2024-02-09 18:09:02 +00:00
alloc.rs libs: use assert_unchecked instead of intrinsic 2024-01-13 20:10:00 +01:00
borrow.rs Add more diagnostic items for clippy 2023-10-05 18:21:47 -04:00
boxed.rs Harmonize blanket implementations for AsyncFn* traits 2024-02-06 17:20:40 +00:00
fmt.rs Closure-consuming helper functions for fmt::Debug helpers 2023-11-10 07:50:11 +09:00
lib.rs Harmonize blanket implementations for AsyncFn* traits 2024-02-06 17:20:40 +00:00
macros.rs Update doc for alloc::format! and core::concat! 2023-09-06 15:11:21 +02:00
raw_vec.rs Reduce use of NonNull::new_unchecked in library/ 2024-02-08 11:52:16 -05:00
rc.rs Rollup merge of #120266 - steffahn:a_rc_into_inner_docs, r=Mark-Simulacrum 2024-01-29 12:56:52 +00:00
slice.rs Bump version placeholders 2024-02-08 07:43:38 -05:00
str.rs Export core::str::from_raw_parts{,_mut} into alloc::str and std::str 2024-01-25 18:11:54 -08:00
string.rs Rollup merge of #95967 - CAD97:from-utf16, r=dtolnay 2023-10-11 03:53:16 +03:00
sync.rs Rollup merge of #120445 - Nemo157:arc-plug, r=Mark-Simulacrum 2024-01-30 16:57:50 +01:00
task.rs doc: fix some doctests after rebase 2024-01-20 10:26:25 -03:00
tests.rs remove redundant imports 2023-12-10 10:56:22 +08:00