about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Goulet <michael@errs.io>2023-12-30 16:32:44 +0000
committerMichael Goulet <michael@errs.io>2023-12-30 16:32:44 +0000
commit847cd6c9deee0bfc87c293c4a94bbf1df851f6bb (patch)
treec53558de26b1413098f7c4e9fdc2d519de31708a
parent07adee70729a2c88080c97045c7357c498815401 (diff)
downloadrust-847cd6c9deee0bfc87c293c4a94bbf1df851f6bb.tar.gz
rust-847cd6c9deee0bfc87c293c4a94bbf1df851f6bb.zip
Use the right type for upvars
-rw-r--r--compiler/rustc_middle/src/ty/instance.rs10
1 files changed, 4 insertions, 6 deletions
diff --git a/compiler/rustc_middle/src/ty/instance.rs b/compiler/rustc_middle/src/ty/instance.rs
index 4b222d33b10..2ac3cddfa15 100644
--- a/compiler/rustc_middle/src/ty/instance.rs
+++ b/compiler/rustc_middle/src/ty/instance.rs
@@ -661,12 +661,10 @@ fn polymorphize<'tcx>(
     // the unpolymorphized upvar closure would result in a polymorphized closure producing
     // multiple mono items (and eventually symbol clashes).
     let def_id = instance.def_id();
-    let upvars_ty = if tcx.is_closure_or_coroutine(def_id) {
-        Some(args.as_closure().tupled_upvars_ty())
-    } else if tcx.type_of(def_id).skip_binder().is_coroutine() {
-        Some(args.as_coroutine().tupled_upvars_ty())
-    } else {
-        None
+    let upvars_ty = match tcx.type_of(def_id).skip_binder().kind() {
+        ty::Closure(..) => Some(args.as_closure().tupled_upvars_ty()),
+        ty::Coroutine(..) => Some(args.as_coroutine().tupled_upvars_ty()),
+        _ => None,
     };
     let has_upvars = upvars_ty.is_some_and(|ty| !ty.tuple_fields().is_empty());
     debug!("polymorphize: upvars_ty={:?} has_upvars={:?}", upvars_ty, has_upvars);