rust/compiler
bors f967532a47 Auto merge of #118420 - compiler-errors:async-gen, r=eholk
Introduce support for `async gen` blocks

I'm delighted to demonstrate that `async gen` block are not very difficult to support. They're simply coroutines that yield `Poll<Option<T>>` and return `()`.

**This PR is WIP and in draft mode for now** -- I'm mostly putting it up to show folks that it's possible. This PR needs a lang-team experiment associated with it or possible an RFC, since I don't think it falls under the jurisdiction of the `gen` RFC that was recently authored by oli (https://github.com/rust-lang/rfcs/pull/3513, https://github.com/rust-lang/rust/issues/117078).

### Technical note on the pre-generator-transform yield type:

The reason that the underlying coroutines yield `Poll<Option<T>>` and not `Poll<T>` (which would make more sense, IMO, for the pre-transformed coroutine), is because the `TransformVisitor` that is used to turn coroutines into built-in state machine functions would have to destructure and reconstruct the latter into the former, which requires at least inserting a new basic block (for a `switchInt` terminator, to match on the `Poll` discriminant).

This does mean that the desugaring (at the `rustc_ast_lowering` level) of `async gen` blocks is a bit more involved. However, since we already need to intercept both `.await` and `yield` operators, I don't consider it much of a technical burden.

r? `@ghost`
2023-12-08 19:13:57 +00:00
..
rustc Clean up rustc_*/Cargo.toml. 2023-10-30 08:46:02 +11:00
rustc_abi Rename LayoutCalculator::delay_bug as LayoutCalculator::delayed_bug. 2023-12-02 09:01:34 +11:00
rustc_arena rustc_arena: add alloc_str 2023-12-05 17:52:51 -08:00
rustc_ast Auto merge of #118420 - compiler-errors:async-gen, r=eholk 2023-12-08 19:13:57 +00:00
rustc_ast_lowering Auto merge of #118420 - compiler-errors:async-gen, r=eholk 2023-12-08 19:13:57 +00:00
rustc_ast_passes Make some matches exhaustive to avoid bugs, fix tools 2023-12-08 17:23:26 +00:00
rustc_ast_pretty Auto merge of #118420 - compiler-errors:async-gen, r=eholk 2023-12-08 19:13:57 +00:00
rustc_attr Use Session::diagnostic in more places. 2023-12-02 09:01:35 +11:00
rustc_baked_icu_data Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
rustc_borrowck Implement async gen blocks 2023-12-08 17:23:25 +00:00
rustc_builtin_macros Auto merge of #118420 - compiler-errors:async-gen, r=eholk 2023-12-08 19:13:57 +00:00
rustc_codegen_cranelift Auto merge of #118324 - RalfJung:ctfe-read-only-pointers, r=saethlin 2023-12-07 18:11:01 +00:00
rustc_codegen_gcc Auto merge of #118324 - RalfJung:ctfe-read-only-pointers, r=saethlin 2023-12-07 18:11:01 +00:00
rustc_codegen_llvm Auto merge of #118568 - DianQK:no-builtins-symbols, r=pnkfelix 2023-12-07 20:31:55 +00:00
rustc_codegen_ssa Implement async gen blocks 2023-12-08 17:23:25 +00:00
rustc_const_eval Auto merge of #118689 - compiler-errors:const-drop, r=fee1-dead 2023-12-08 13:43:12 +00:00
rustc_data_structures 1. fix jobserver GLOBAL_CLIENT_CHECKED uninitialized before use 2023-12-08 09:50:28 +08:00
rustc_driver Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
rustc_driver_impl rustc_driver_impl: Address all rustc::potential_query_instability lints 2023-12-05 06:19:14 +01:00
rustc_error_codes Yeet E0744 2023-11-28 20:40:38 +00:00
rustc_error_messages Remove rustc_error_messages/messages.ftl. 2023-11-26 08:37:27 +11:00
rustc_errors Inline and remove fatal_no_raise. 2023-12-04 18:57:42 +11:00
rustc_expand Auto merge of #118420 - compiler-errors:async-gen, r=eholk 2023-12-08 19:13:57 +00:00
rustc_feature Auto merge of #118605 - fee1-dead-contrib:rm-rustc_host, r=compiler-errors 2023-12-06 16:00:24 +00:00
rustc_fluent_macro Add a useful comment. 2023-11-26 08:38:02 +11:00
rustc_fs_util Clean up rustc_*/Cargo.toml. 2023-10-30 08:46:02 +11:00
rustc_graphviz remove unused pub fn 2023-11-23 14:11:02 +03:00
rustc_hir Auto merge of #118420 - compiler-errors:async-gen, r=eholk 2023-12-08 19:13:57 +00:00
rustc_hir_analysis Auto merge of #118668 - fmease:resolve-assoc-item-bindings-by-namespace, r=compiler-errors 2023-12-08 09:30:52 +00:00
rustc_hir_pretty Remove #[rustc_host], use internal desugaring 2023-12-05 01:15:21 +00:00
rustc_hir_typeck HACK: constrain yield type in check_fn so that projection is successful even with no yield 2023-12-08 17:23:26 +00:00
rustc_incremental Rename HandlerInner::delayed_span_bugs as HandlerInner::span_delayed_bugs. 2023-12-02 09:01:34 +11:00
rustc_index Replace no_ord_impl with orderable. 2023-11-22 18:38:17 +11:00
rustc_index_macros Put backticks around some attributes in doc comments. 2023-11-27 09:37:01 +11:00
rustc_infer update fixme 2023-12-08 02:16:29 +01:00
rustc_interface 1. fix jobserver GLOBAL_CLIENT_CHECKED uninitialized before use 2023-12-08 09:50:28 +08:00
rustc_lexer Clean up rustc_*/Cargo.toml. 2023-10-30 08:46:02 +11:00
rustc_lint Auto merge of #118420 - compiler-errors:async-gen, r=eholk 2023-12-08 19:13:57 +00:00
rustc_lint_defs Auto merge of #118324 - RalfJung:ctfe-read-only-pointers, r=saethlin 2023-12-07 18:11:01 +00:00
rustc_llvm Rollup merge of #118177 - sivadeilra:suppress-llvm-warnings, r=cuviper 2023-12-06 21:52:31 +01:00
rustc_log rustc_log: provide a way to init logging based on the values, not names, of the env vars 2023-11-11 15:24:33 +01:00
rustc_macros Unify HashStable implementations 2023-11-21 05:49:45 +00:00
rustc_metadata Auto merge of #118488 - andjo403:remove_deadlock, r=SparrowLii 2023-12-05 14:02:15 +00:00
rustc_middle Implement async gen blocks 2023-12-08 17:23:25 +00:00
rustc_mir_build Rollup merge of #118598 - Nadrieril:remove_precise_pointer_size_matching, r=davidtwco 2023-12-05 16:08:35 +01:00
rustc_mir_dataflow Deparameterize Results and ResultsCursor. 2023-11-27 10:35:43 +11:00
rustc_mir_transform Implement async gen blocks 2023-12-08 17:23:25 +00:00
rustc_monomorphize Rollup merge of #118693 - saethlin:alignment-check-symbol-reachable, r=bjorn3 2023-12-08 06:44:42 +01:00
rustc_parse Auto merge of #118420 - compiler-errors:async-gen, r=eholk 2023-12-08 19:13:57 +00:00
rustc_parse_format Auto merge of #117819 - fmease:rustc_parse_format-stable-rustc, r=Nilstrieb 2023-11-15 14:55:35 +00:00
rustc_passes Remove #[rustc_host], use internal desugaring 2023-12-05 01:15:21 +00:00
rustc_privacy privacy: Simplify update_macro_reachable 2023-12-06 16:44:14 +03:00
rustc_query_impl QueryContext: rename try_collect_active_jobs -> collect_active_jobs and change it's return type from Option<QueryMap> to QueryMap 2023-11-27 18:13:15 +03:00
rustc_query_system Rollup merge of #118123 - RalfJung:internal-lib-features, r=compiler-errors 2023-12-05 14:52:41 -05:00
rustc_resolve Auto merge of #118420 - compiler-errors:async-gen, r=eholk 2023-12-08 19:13:57 +00:00
rustc_serialize Call FileEncoder::finish in rmeta encoding 2023-11-22 22:49:22 -05:00
rustc_session Rollup merge of #118709 - oksbsb:fix-job-server, r=SparrowLii 2023-12-08 06:44:43 +01:00
rustc_smir Implement async gen blocks 2023-12-08 17:23:25 +00:00
rustc_span Implement async gen blocks 2023-12-08 17:23:25 +00:00
rustc_symbol_mangling CFI: Add char to CFI integer normalization 2023-12-07 11:28:16 -08:00
rustc_target targets: remove not-added {i386,i486}-unknown-linux-gnu 2023-12-07 15:36:00 +00:00
rustc_trait_selection Implement async gen blocks 2023-12-08 17:23:25 +00:00
rustc_traits add unused NormalizesTo predicate 2023-12-07 17:52:51 +01:00
rustc_transmute Update itertools to 0.11. 2023-11-22 08:13:21 +11:00
rustc_ty_utils Implement async gen blocks 2023-12-08 17:23:25 +00:00
rustc_type_ir implement and use NormalizesTo 2023-12-08 01:31:18 +01:00
stable_mir Rollup merge of #118688 - celinval:smir-rvalue-ty, r=compiler-errors 2023-12-07 21:38:08 +01:00