diff options
| author | bors <bors@rust-lang.org> | 2024-07-27 00:01:28 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-07-27 00:01:28 +0000 |
| commit | 8b6b8574f6f2fcc71ec500a52d7bf74fdaff0ed6 (patch) | |
| tree | de86e56607f75e9ec7ae46da17ee8d2131076af0 /compiler/rustc_trait_selection/src | |
| parent | 7c2012d0ec3aae89fefc40e5d6b317a0949cda36 (diff) | |
| parent | 8385f3b7ee8974d109d4bbf64bdee877bf11f2a8 (diff) | |
| download | rust-8b6b8574f6f2fcc71ec500a52d7bf74fdaff0ed6.tar.gz rust-8b6b8574f6f2fcc71ec500a52d7bf74fdaff0ed6.zip | |
Auto merge of #128253 - tgross35:rollup-rpmoebz, r=tgross35
Rollup of 9 pull requests
Successful merges:
- #124941 (Stabilize const `{integer}::from_str_radix` i.e. `const_int_from_str`)
- #128201 (Implement `Copy`/`Clone` for async closures)
- #128210 (rustdoc: change title of search results)
- #128223 (Refactor complex conditions in `collect_tokens_trailing_token`)
- #128224 (Remove unnecessary range replacements)
- #128226 (Remove redundant option that was just encoding that a slice was empty)
- #128227 (CI: do not respect custom try jobs for unrolled perf builds)
- #128229 (Improve `extern "<abi>" unsafe fn()` error message)
- #128235 (Fix `Iterator::filter` docs)
r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_trait_selection/src')
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/select/mod.rs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index c007cd5314a..699c05466bd 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -2262,8 +2262,21 @@ impl<'tcx> SelectionContext<'_, 'tcx> { } } - // FIXME(async_closures): These are never clone, for now. - ty::CoroutineClosure(_, _) => None, + ty::CoroutineClosure(_, args) => { + // (*) binder moved here + let ty = self.infcx.shallow_resolve(args.as_coroutine_closure().tupled_upvars_ty()); + if let ty::Infer(ty::TyVar(_)) = ty.kind() { + // Not yet resolved. + Ambiguous + } else { + Where( + obligation + .predicate + .rebind(args.as_coroutine_closure().upvar_tys().to_vec()), + ) + } + } + // `Copy` and `Clone` are automatically implemented for an anonymous adt // if all of its fields are `Copy` and `Clone` ty::Adt(adt, args) if adt.is_anonymous() => { |
