1
Fork 0
rust/compiler
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
..
rustc Clean up rustc_*/Cargo.toml. 2023-10-30 08:46:02 +11:00
rustc_abi Fix rustc_abi build on stable 2024-01-16 21:15:31 +01:00
rustc_arena Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_ast Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_ast_lowering Rollup merge of #120850 - petrochenkov:empimpres, r=cjgillot 2024-02-10 00:58:39 +01:00
rustc_ast_passes Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_ast_pretty Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_attr Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_baked_icu_data Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
rustc_borrowck Auto merge of #120843 - matthiaskrgr:rollup-med37z5, r=matthiaskrgr 2024-02-09 15:34:48 +00:00
rustc_builtin_macros Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_codegen_cranelift Auto merge of #120843 - matthiaskrgr:rollup-med37z5, r=matthiaskrgr 2024-02-09 15:34:48 +00:00
rustc_codegen_gcc Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_codegen_llvm Rollup merge of #120844 - compiler-errors:async-di, r=oli-obk 2024-02-09 19:21:19 +01:00
rustc_codegen_ssa Rollup merge of #120846 - petrochenkov:jobs, r=oli-obk 2024-02-10 00:58:38 +01:00
rustc_const_eval Rollup merge of #120354 - lukas-code:metadata-normalize, r=lcnr 2024-02-09 19:21:16 +01:00
rustc_data_structures Rollup merge of #120846 - petrochenkov:jobs, r=oli-obk 2024-02-10 00:58:38 +01:00
rustc_driver Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
rustc_driver_impl Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_error_codes Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_error_messages Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_errors Rollup merge of #120828 - nnethercote:fix-stash-steal, r=oli-obk 2024-02-09 14:41:52 +01:00
rustc_expand Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_feature Auto merge of #120676 - Mark-Simulacrum:bootstrap-bump, r=clubby789 2024-02-09 18:09:02 +00:00
rustc_fluent_macro Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_fs_util Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_graphviz Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_hir Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_hir_analysis Auto merge of #120843 - matthiaskrgr:rollup-med37z5, r=matthiaskrgr 2024-02-09 15:34:48 +00:00
rustc_hir_pretty Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_hir_typeck Auto merge of #120712 - compiler-errors:async-closures-harmonize, r=oli-obk 2024-02-10 07:15:15 +00:00
rustc_incremental Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_index Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_index_macros Step all bootstrap cfgs forward 2024-02-08 07:44:34 -05:00
rustc_infer Auto merge of #120712 - compiler-errors:async-closures-harmonize, r=oli-obk 2024-02-10 07:15:15 +00:00
rustc_interface Rollup merge of #120828 - nnethercote:fix-stash-steal, r=oli-obk 2024-02-09 14:41:52 +01:00
rustc_lexer Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_lint Rollup merge of #120853 - blyxyas:no-collect, r=cjgillot 2024-02-10 00:58:40 +01:00
rustc_lint_defs Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_llvm Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_log Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_macros Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_metadata Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_middle Auto merge of #120852 - matthiaskrgr:rollup-01pr8gj, r=matthiaskrgr 2024-02-09 21:06:12 +00:00
rustc_mir_build Rollup merge of #120817 - compiler-errors:more-mir-errors, r=oli-obk 2024-02-09 14:41:51 +01:00
rustc_mir_dataflow Auto merge of #120843 - matthiaskrgr:rollup-med37z5, r=matthiaskrgr 2024-02-09 15:34:48 +00:00
rustc_mir_transform Auto merge of #120843 - matthiaskrgr:rollup-med37z5, r=matthiaskrgr 2024-02-09 15:34:48 +00:00
rustc_monomorphize Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_next_trait_solver Add CoroutineClosure to TyKind, AggregateKind, UpvarArgs 2024-02-06 02:22:58 +00:00
rustc_parse Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_parse_format Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_passes Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_pattern_analysis Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_privacy Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_query_impl Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_query_system Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_resolve Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_serialize Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_session Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_smir Add a new debug_assertions instrinsic (compiler) 2024-02-08 11:49:08 -05:00
rustc_span Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_symbol_mangling Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_target Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
rustc_trait_selection Auto merge of #120712 - compiler-errors:async-closures-harmonize, r=oli-obk 2024-02-10 07:15:15 +00:00
rustc_traits Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_transmute Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_ty_utils Auto merge of #120712 - compiler-errors:async-closures-harmonize, r=oli-obk 2024-02-10 07:15:15 +00:00
rustc_type_ir Rollup merge of #120693 - nnethercote:invert-diagnostic-lints, r=davidtwco 2024-02-09 14:41:50 +01:00
stable_mir Add a new debug_assertions instrinsic (compiler) 2024-02-08 11:49:08 -05:00