diff options
| author | Michael Goulet <michael@errs.io> | 2024-02-26 22:53:45 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-02-27 17:21:40 +0000 |
| commit | 2252ff730285decb81837db51a922608b2f036cc (patch) | |
| tree | f528f51734d1806b3ef45e7791545d6b7c4a6f01 /compiler/rustc_mir_transform/src/shim.rs | |
| parent | 4c0016a01f15d207ae1a430fd601098289654bb9 (diff) | |
| download | rust-2252ff730285decb81837db51a922608b2f036cc.tar.gz rust-2252ff730285decb81837db51a922608b2f036cc.zip | |
Also support `fnptr(): async Fn` in codegen
Diffstat (limited to 'compiler/rustc_mir_transform/src/shim.rs')
| -rw-r--r-- | compiler/rustc_mir_transform/src/shim.rs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/compiler/rustc_mir_transform/src/shim.rs b/compiler/rustc_mir_transform/src/shim.rs index 75613a2c555..733e2f93b25 100644 --- a/compiler/rustc_mir_transform/src/shim.rs +++ b/compiler/rustc_mir_transform/src/shim.rs @@ -37,7 +37,11 @@ fn make_shim<'tcx>(tcx: TyCtxt<'tcx>, instance: ty::InstanceDef<'tcx>) -> Body<' } ty::InstanceDef::FnPtrShim(def_id, ty) => { let trait_ = tcx.trait_of_item(def_id).unwrap(); - let adjustment = match tcx.fn_trait_kind_from_def_id(trait_) { + // Supports `Fn` or `async Fn` traits. + let adjustment = match tcx + .fn_trait_kind_from_def_id(trait_) + .or_else(|| tcx.async_fn_trait_kind_from_def_id(trait_)) + { Some(ty::ClosureKind::FnOnce) => Adjustment::Identity, Some(ty::ClosureKind::Fn) => Adjustment::Deref { source: DerefSource::ImmRef }, Some(ty::ClosureKind::FnMut) => Adjustment::Deref { source: DerefSource::MutRef }, |
