granite-rust/compiler
bors 5dfb4b0afa Auto merge of #104321 - Swatinem:async-gen, r=oli-obk
Avoid `GenFuture` shim when compiling async constructs

Previously, async constructs would be lowered to "normal" generators, with an additional `from_generator` / `GenFuture` shim in between to convert from `Generator` to `Future`.

The compiler will now special-case these generators internally so that async constructs will *directly* implement `Future` without the need to go through the `from_generator` / `GenFuture` shim.

The primary motivation for this change was hiding this implementation detail in stack traces and debuginfo, but it can in theory also help the optimizer as there is less abstractions to see through.

---

Given this demo code:

```rust
pub async fn a(arg: u32) -> Backtrace {
    let bt = b().await;
    let _arg = arg;
    bt
}

pub async fn b() -> Backtrace {
    Backtrace::force_capture()
}
```

I would get the following with the latest stable compiler (on Windows):

```
   4: async_codegen:🅱️:async_fn$0
             at .\src\lib.rs:10
   5: core::future::from_generator::impl$1::poll<enum2$<async_codegen:🅱️:async_fn_env$0> >
             at /rustc/897e37553bba8b42751c67658967889d11ecd120\library\core\src\future\mod.rs:91
   6: async_codegen:🅰️:async_fn$0
             at .\src\lib.rs:4
   7: core::future::from_generator::impl$1::poll<enum2$<async_codegen:🅰️:async_fn_env$0> >
             at /rustc/897e37553bba8b42751c67658967889d11ecd120\library\core\src\future\mod.rs:91
```

whereas now I get a much cleaner stack trace:

```
   3: async_codegen:🅱️:async_fn$0
             at .\src\lib.rs:10
   4: async_codegen:🅰️:async_fn$0
             at .\src\lib.rs:4
```
2022-11-24 17:14:42 +00:00
..
rustc rustc: Use unix_sigpipe instead of rustc_driver::set_sigpipe_handler 2022-10-02 17:49:36 +02:00
rustc_apfloat Add diagnostic translation lints to crates that don't emit them 2022-08-18 19:29:02 +01:00
rustc_arena rustc_arena: remove a couple of ref patterns 2022-11-22 18:49:29 +00:00
rustc_ast Suggest .clone() or ref binding on E0382 2022-11-23 12:17:47 -08:00
rustc_ast_lowering Auto merge of #104321 - Swatinem:async-gen, r=oli-obk 2022-11-24 17:14:42 +00:00
rustc_ast_passes Use as_deref in compiler (but only where it makes sense) 2022-11-16 21:58:58 +00:00
rustc_ast_pretty Suggest .clone() or ref binding on E0382 2022-11-23 12:17:47 -08:00
rustc_attr Migrate all diagnostics 2022-10-23 10:09:44 +02:00
rustc_baked_icu_data Update crate documentation of rustc_baked_icu_data crate 2022-11-18 14:46:36 -08:00
rustc_borrowck Auto merge of #104321 - Swatinem:async-gen, r=oli-obk 2022-11-24 17:14:42 +00:00
rustc_builtin_macros Rollup merge of #103908 - estebank:consider-cloning, r=compiler-errors 2022-11-24 08:42:33 +01:00
rustc_codegen_cranelift Auto merge of #104507 - WaffleLapkin:asderefsyou, r=wesleywiser 2022-11-24 00:17:35 +00:00
rustc_codegen_gcc Rollup merge of #104001 - Ayush1325:custom-entry, r=bjorn3 2022-11-19 11:54:43 +05:30
rustc_codegen_llvm Auto merge of #104507 - WaffleLapkin:asderefsyou, r=wesleywiser 2022-11-24 00:17:35 +00:00
rustc_codegen_ssa Properly handle Pin<&mut dyn* Trait> receiver in codegen 2022-11-24 01:10:25 +00:00
rustc_const_eval Avoid GenFuture shim when compiling async constructs 2022-11-24 10:04:27 +01:00
rustc_data_structures Auto merge of #97870 - eggyal:inplace_fold_spec, r=wesleywiser 2022-11-19 02:28:47 +00:00
rustc_driver Auto merge of #104507 - WaffleLapkin:asderefsyou, r=wesleywiser 2022-11-24 00:17:35 +00:00
rustc_error_codes Auto merge of #103491 - cjgillot:self-rpit, r=oli-obk 2022-11-21 12:17:03 +00:00
rustc_error_messages Rollup merge of #104621 - YC:master, r=davidtwco 2022-11-22 22:54:40 -05:00
rustc_errors Auto merge of #104507 - WaffleLapkin:asderefsyou, r=wesleywiser 2022-11-24 00:17:35 +00:00
rustc_expand Rollup merge of #104638 - Nilstrieb:macro-diagnostics, r=compiler-errors 2022-11-22 01:26:08 -05:00
rustc_feature Auto merge of #103491 - cjgillot:self-rpit, r=oli-obk 2022-11-21 12:17:03 +00:00
rustc_fs_util Add diagnostic translation lints to crates that don't emit them 2022-08-18 19:29:02 +01:00
rustc_graphviz Add initial version of value analysis and dataflow constant propagation 2022-11-07 10:35:08 +01:00
rustc_hir Auto merge of #104321 - Swatinem:async-gen, r=oli-obk 2022-11-24 17:14:42 +00:00
rustc_hir_analysis Rollup merge of #104775 - spastorino:use-obligation-ctxt-normalize, r=lcnr 2022-11-24 08:42:37 +01:00
rustc_hir_pretty Store a LocalDefId in hir::Variant & hir::Field. 2022-11-13 14:06:51 +00:00
rustc_hir_typeck Auto merge of #104321 - Swatinem:async-gen, r=oli-obk 2022-11-24 17:14:42 +00:00
rustc_incremental Rename some OwnerId fields. 2022-10-29 20:28:38 +11:00
rustc_index Implement Idx for OwnerId. 2022-11-01 17:02:51 +00:00
rustc_infer Rollup merge of #103488 - oli-obk:impl_trait_for_tait, r=lcnr 2022-11-22 22:54:38 -05:00
rustc_interface Auto merge of #104507 - WaffleLapkin:asderefsyou, r=wesleywiser 2022-11-24 00:17:35 +00:00
rustc_lexer Auto merge of #104507 - WaffleLapkin:asderefsyou, r=wesleywiser 2022-11-24 00:17:35 +00:00
rustc_lint Auto merge of #104321 - Swatinem:async-gen, r=oli-obk 2022-11-24 17:14:42 +00:00
rustc_lint_defs Make deref_into_dyn_supertrait lint the impl and not the usage 2022-11-23 15:40:27 +00:00
rustc_llvm Rollup merge of #104517 - dfordivam:patch-1, r=cuviper 2022-11-24 08:42:33 +01:00
rustc_log Use IsTerminal in rustc_log 2022-10-16 15:10:40 +01:00
rustc_macros Improve slug name error 2022-11-21 15:24:51 +01:00
rustc_metadata Auto merge of #104507 - WaffleLapkin:asderefsyou, r=wesleywiser 2022-11-24 00:17:35 +00:00
rustc_middle Auto merge of #104321 - Swatinem:async-gen, r=oli-obk 2022-11-24 17:14:42 +00:00
rustc_mir_build Rollup merge of #103908 - estebank:consider-cloning, r=compiler-errors 2022-11-24 08:42:33 +01:00
rustc_mir_dataflow Allow iterators instead of requiring slices that will get turned into iterators 2022-11-21 20:33:55 +00:00
rustc_mir_transform Avoid GenFuture shim when compiling async constructs 2022-11-24 10:04:27 +01:00
rustc_monomorphize Stop passing the self-type as a separate argument. 2022-11-21 20:39:46 +00:00
rustc_parse Rollup merge of #103908 - estebank:consider-cloning, r=compiler-errors 2022-11-24 08:42:33 +01:00
rustc_parse_format shift no characters when using raw string literals 2022-11-15 14:28:20 +09:00
rustc_passes Auto merge of #104507 - WaffleLapkin:asderefsyou, r=wesleywiser 2022-11-24 00:17:35 +00:00
rustc_plugin_impl Migrate all diagnostics 2022-10-23 10:09:44 +02:00
rustc_privacy Store a LocalDefId in hir::Variant & hir::Field. 2022-11-13 14:06:51 +00:00
rustc_query_impl Auto merge of #103808 - cjgillot:vec-cache, r=TaKO8Ki 2022-11-24 06:32:23 +00:00
rustc_query_system Auto merge of #103808 - cjgillot:vec-cache, r=TaKO8Ki 2022-11-24 06:32:23 +00:00
rustc_resolve Auto merge of #104321 - Swatinem:async-gen, r=oli-obk 2022-11-24 17:14:42 +00:00
rustc_save_analysis Auto merge of #104507 - WaffleLapkin:asderefsyou, r=wesleywiser 2022-11-24 00:17:35 +00:00
rustc_serialize rustdoc: use ThinVec for cleaned generics 2022-11-02 16:17:22 -07:00
rustc_session Auto merge of #104507 - WaffleLapkin:asderefsyou, r=wesleywiser 2022-11-24 00:17:35 +00:00
rustc_smir Only keep one version of ImplicitSelfKind. 2022-09-13 19:18:23 +02:00
rustc_span Avoid GenFuture shim when compiling async constructs 2022-11-24 10:04:27 +01:00
rustc_symbol_mangling Unreserve braced enum variants in value namespace 2022-11-21 22:40:06 +03:00
rustc_target Rollup merge of #102293 - ecnelises:aix.initial, r=davidtwco 2022-11-23 06:40:22 +09:00
rustc_trait_selection Auto merge of #104321 - Swatinem:async-gen, r=oli-obk 2022-11-24 17:14:42 +00:00
rustc_traits Avoid GenFuture shim when compiling async constructs 2022-11-24 10:04:27 +01:00
rustc_transmute Auto merge of #103831 - chenyukang:yukang/fix-103751-ice, r=nagisa 2022-11-05 13:48:30 +00:00
rustc_ty_utils Avoid GenFuture shim when compiling async constructs 2022-11-24 10:04:27 +01:00
rustc_type_ir Remove some unnecessary slicing 2022-11-21 20:38:55 +00:00