about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_middle/src/query/mod.rs6
-rw-r--r--compiler/rustc_middle/src/ty/context.rs23
-rw-r--r--compiler/rustc_typeck/src/collect.rs25
3 files changed, 23 insertions, 31 deletions
diff --git a/compiler/rustc_middle/src/query/mod.rs b/compiler/rustc_middle/src/query/mod.rs
index aba534ac19f..b516810205f 100644
--- a/compiler/rustc_middle/src/query/mod.rs
+++ b/compiler/rustc_middle/src/query/mod.rs
@@ -436,12 +436,6 @@ rustc_queries! {
             desc { |tcx| "computing the super predicates of `{}`", tcx.def_path_str(key) }
         }
 
-        /// Maps from the `DefId` of a trait to the list of
-        /// all the ancestors super traits.
-        query super_traits_of(key: DefId) -> Lrc<FxHashSet<DefId>> {
-            desc { |tcx| "computing the super traits of `{}`", tcx.def_path_str(key) }
-        }
-
         /// The `Option<Ident>` is the name of an associated type. If it is `None`, then this query
         /// returns the full set of predicates. If `Some<Ident>`, then the query returns only the
         /// subset of super-predicates that reference traits that define the given associated type.
diff --git a/compiler/rustc_middle/src/ty/context.rs b/compiler/rustc_middle/src/ty/context.rs
index b2a8b33e4ff..6a60d65661a 100644
--- a/compiler/rustc_middle/src/ty/context.rs
+++ b/compiler/rustc_middle/src/ty/context.rs
@@ -2095,6 +2095,29 @@ impl<'tcx> TyCtxt<'tcx> {
         })
     }
 
+    /// Computes the def-ids of the transitive super-traits of `trait_def_id`. This (intentionally)
+    /// does not compute the full elaborated super-predicates but just the set of def-ids. It is used
+    /// to identify which traits may define a given associated type to help avoid cycle errors.
+    /// Returns `Lrc<FxHashSet<DefId>>` so that cloning is cheaper.
+    fn super_traits_of(self, trait_def_id: DefId) -> Lrc<FxHashSet<DefId>> {
+        let mut set = FxHashSet::default();
+        let mut stack = vec![trait_def_id];
+        while let Some(trait_did) = stack.pop() {
+            if !set.insert(trait_did) {
+                continue;
+            }
+
+            let generic_predicates = self.super_predicates_of(trait_did);
+            for (predicate, _) in generic_predicates.predicates {
+                if let ty::PredicateAtom::Trait(data, _) = predicate.skip_binders() {
+                    stack.push(data.def_id());
+                }
+            }
+        }
+
+        Lrc::new(set)
+    }
+
     /// Given a closure signature, returns an equivalent fn signature. Detuples
     /// and so forth -- so e.g., if we have a sig with `Fn<(u32, i32)>` then
     /// you would get a `fn(u32, i32)`.
diff --git a/compiler/rustc_typeck/src/collect.rs b/compiler/rustc_typeck/src/collect.rs
index 316e88b5384..28c4da1a743 100644
--- a/compiler/rustc_typeck/src/collect.rs
+++ b/compiler/rustc_typeck/src/collect.rs
@@ -26,7 +26,6 @@ use rustc_ast::{MetaItemKind, NestedMetaItem};
 use rustc_attr::{list_contains_name, InlineAttr, InstructionSetAttr, OptimizeAttr};
 use rustc_data_structures::captures::Captures;
 use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexSet};
-use rustc_data_structures::sync::Lrc;
 use rustc_errors::{struct_span_err, Applicability};
 use rustc_hir as hir;
 use rustc_hir::def::{CtorKind, DefKind, Res};
@@ -81,7 +80,6 @@ pub fn provide(providers: &mut Providers) {
         projection_ty_from_predicates,
         explicit_predicates_of,
         super_predicates_of,
-        super_traits_of,
         super_predicates_that_define_assoc_type,
         trait_explicit_predicates_and_bounds,
         type_param_predicates,
@@ -1116,29 +1114,6 @@ fn super_predicates_that_define_assoc_type(
     }
 }
 
-/// Computes the def-ids of the transitive super-traits of `trait_def_id`. This (intentionally)
-/// does not compute the full elaborated super-predicates but just the set of def-ids. It is used
-/// to identify which traits may define a given associated type to help avoid cycle errors.
-/// Returns `Lrc<FxHashSet<DefId>>` so that cloning is cheaper.
-fn super_traits_of(tcx: TyCtxt<'_>, trait_def_id: DefId) -> Lrc<FxHashSet<DefId>> {
-    let mut set = FxHashSet::default();
-    let mut stack = vec![trait_def_id];
-    while let Some(trait_did) = stack.pop() {
-        if !set.insert(trait_did) {
-            continue;
-        }
-
-        let generic_predicates = tcx.super_predicates_of(trait_did);
-        for (predicate, _) in generic_predicates.predicates {
-            if let ty::PredicateAtom::Trait(data, _) = predicate.skip_binders() {
-                stack.push(data.def_id());
-            }
-        }
-    }
-
-    Lrc::new(set)
-}
-
 fn trait_def(tcx: TyCtxt<'_>, def_id: DefId) -> ty::TraitDef {
     let hir_id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local());
     let item = tcx.hir().expect_item(hir_id);