about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2022-03-30 12:25:23 +0200
committerCamille GILLOT <gillot.camille@gmail.com>2022-04-10 13:58:29 +0200
commitbbacfcb6c4b25ad4741ae9cf32db342f7e612b29 (patch)
tree55019a3a367266afee7cd4a428df734bfbe0ba43
parent0c6e2466f233349a9d2dc6c6e4f5a22f86d7882b (diff)
downloadrust-bbacfcb6c4b25ad4741ae9cf32db342f7e612b29.tar.gz
rust-bbacfcb6c4b25ad4741ae9cf32db342f7e612b29.zip
Avoid checking HIR in variances_of.
-rw-r--r--compiler/rustc_typeck/src/variance/mod.rs51
1 files changed, 13 insertions, 38 deletions
diff --git a/compiler/rustc_typeck/src/variance/mod.rs b/compiler/rustc_typeck/src/variance/mod.rs
index 66fb9eb8693..e622192f2c9 100644
--- a/compiler/rustc_typeck/src/variance/mod.rs
+++ b/compiler/rustc_typeck/src/variance/mod.rs
@@ -3,9 +3,8 @@
 //!
 //! [rustc dev guide]: https://rustc-dev-guide.rust-lang.org/variance.html
 
-use hir::Node;
 use rustc_arena::DroplessArena;
-use rustc_hir as hir;
+use rustc_hir::def::DefKind;
 use rustc_hir::def_id::DefId;
 use rustc_middle::ty::query::Providers;
 use rustc_middle::ty::{self, CrateVariancesMap, TyCtxt};
@@ -38,42 +37,18 @@ fn crate_variances(tcx: TyCtxt<'_>, (): ()) -> CrateVariancesMap<'_> {
 }
 
 fn variances_of(tcx: TyCtxt<'_>, item_def_id: DefId) -> &[ty::Variance] {
-    let id = tcx.hir().local_def_id_to_hir_id(item_def_id.expect_local());
-    let unsupported = || {
-        // Variance not relevant.
-        span_bug!(tcx.hir().span(id), "asked to compute variance for wrong kind of item")
-    };
-    match tcx.hir().get(id) {
-        Node::Item(item) => match item.kind {
-            hir::ItemKind::Enum(..)
-            | hir::ItemKind::Struct(..)
-            | hir::ItemKind::Union(..)
-            | hir::ItemKind::Fn(..) => {}
-
-            _ => unsupported(),
-        },
-
-        Node::TraitItem(item) => match item.kind {
-            hir::TraitItemKind::Fn(..) => {}
-
-            _ => unsupported(),
-        },
-
-        Node::ImplItem(item) => match item.kind {
-            hir::ImplItemKind::Fn(..) => {}
-
-            _ => unsupported(),
-        },
-
-        Node::ForeignItem(item) => match item.kind {
-            hir::ForeignItemKind::Fn(..) => {}
-
-            _ => unsupported(),
-        },
-
-        Node::Variant(_) | Node::Ctor(..) => {}
-
-        _ => unsupported(),
+    match tcx.def_kind(item_def_id) {
+        DefKind::Fn
+        | DefKind::AssocFn
+        | DefKind::Enum
+        | DefKind::Struct
+        | DefKind::Union
+        | DefKind::Variant
+        | DefKind::Ctor(..) => {}
+        _ => {
+            // Variance not relevant.
+            span_bug!(tcx.def_span(item_def_id), "asked to compute variance for wrong kind of item")
+        }
     }
 
     // Everything else must be inferred.