about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorOli Scherer <github35764891676564198441@oli-obk.de>2021-03-04 15:44:20 +0000
committerOli Scherer <github35764891676564198441@oli-obk.de>2021-03-04 15:45:31 +0000
commit29f4aa753fdf8a48523fbb51ddd2d21546b281a9 (patch)
treeb98496d2dbbae43b11ccf6b137e0bdedef4b7ffb /compiler
parent67a61b9a013531bd0b03c8ddf1fd8922d4b7d252 (diff)
downloadrust-29f4aa753fdf8a48523fbb51ddd2d21546b281a9.tar.gz
rust-29f4aa753fdf8a48523fbb51ddd2d21546b281a9.zip
Fixes -Zpolymorphize for src/test/ui/const-generics/auxiliary/crayte.rs
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_mir/src/monomorphize/polymorphize.rs48
1 files changed, 39 insertions, 9 deletions
diff --git a/compiler/rustc_mir/src/monomorphize/polymorphize.rs b/compiler/rustc_mir/src/monomorphize/polymorphize.rs
index 5b7c0ac5556..05b0e3a7dab 100644
--- a/compiler/rustc_mir/src/monomorphize/polymorphize.rs
+++ b/compiler/rustc_mir/src/monomorphize/polymorphize.rs
@@ -107,18 +107,48 @@ fn mark_used_by_default_parameters<'tcx>(
     generics: &'tcx ty::Generics,
     unused_parameters: &mut FiniteBitSet<u32>,
 ) {
-    if !tcx.is_trait(def_id) && (tcx.is_closure(def_id) || tcx.type_of(def_id).is_generator()) {
-        for param in &generics.params {
-            debug!(?param, "(closure/gen)");
-            unused_parameters.clear(param.index);
-        }
-    } else {
-        for param in &generics.params {
-            debug!(?param, "(other)");
-            if let ty::GenericParamDefKind::Lifetime = param.kind {
+    match tcx.def_kind(def_id) {
+        DefKind::Closure | DefKind::Generator => {
+            for param in &generics.params {
+                debug!(?param, "(closure/gen)");
                 unused_parameters.clear(param.index);
             }
         }
+        DefKind::Mod
+        | DefKind::Struct
+        | DefKind::Union
+        | DefKind::Enum
+        | DefKind::Variant
+        | DefKind::Trait
+        | DefKind::TyAlias
+        | DefKind::ForeignTy
+        | DefKind::TraitAlias
+        | DefKind::AssocTy
+        | DefKind::TyParam
+        | DefKind::Fn
+        | DefKind::Const
+        | DefKind::ConstParam
+        | DefKind::Static
+        | DefKind::Ctor(_, _)
+        | DefKind::AssocFn
+        | DefKind::AssocConst
+        | DefKind::Macro(_)
+        | DefKind::ExternCrate
+        | DefKind::Use
+        | DefKind::ForeignMod
+        | DefKind::AnonConst
+        | DefKind::OpaqueTy
+        | DefKind::Field
+        | DefKind::LifetimeParam
+        | DefKind::GlobalAsm
+        | DefKind::Impl => {
+            for param in &generics.params {
+                debug!(?param, "(other)");
+                if let ty::GenericParamDefKind::Lifetime = param.kind {
+                    unused_parameters.clear(param.index);
+                }
+            }
+        }
     }
 
     if let Some(parent) = generics.parent {