]> git.lizzy.rs Git - rust.git/commitdiff
Remove `DefId` from `ConstraintCategory::Predicate`
authorAaron Hill <aa1ronham@gmail.com>
Mon, 27 Sep 2021 15:45:34 +0000 (10:45 -0500)
committerAaron Hill <aa1ronham@gmail.com>
Mon, 27 Sep 2021 15:45:34 +0000 (10:45 -0500)
This shirnks the size of `ConstraintCategory`, hopefully
fixing a performance regression.

compiler/rustc_borrowck/src/diagnostics/region_errors.rs
compiler/rustc_borrowck/src/region_infer/mod.rs
compiler/rustc_borrowck/src/type_check/canonical.rs
compiler/rustc_middle/src/mir/query.rs

index b127330efa2fa88c2696ac40453844fcd8903b3e..d05cfebc5f02e113d6d887eb41adb7e2f8c51e34 100644 (file)
@@ -40,7 +40,7 @@ fn description(&self) -> &'static str {
             ConstraintCategory::OpaqueType => "opaque type ",
             ConstraintCategory::ClosureUpvar(_) => "closure capture ",
             ConstraintCategory::Usage => "this usage ",
-            ConstraintCategory::Predicate(_, _)
+            ConstraintCategory::Predicate(_)
             | ConstraintCategory::Boring
             | ConstraintCategory::BoringNoLocation
             | ConstraintCategory::Internal => "",
index cb1b0e0c934fb58d4afafccd9925aca05f423837..917d69a5c866446ac4fc7ac6046d40642341326e 100644 (file)
@@ -5,7 +5,7 @@
 use rustc_data_structures::frozen::Frozen;
 use rustc_data_structures::fx::{FxHashMap, FxHashSet};
 use rustc_data_structures::graph::scc::Sccs;
-use rustc_hir::def_id::DefId;
+use rustc_hir::def_id::{DefId, CRATE_DEF_ID};
 use rustc_hir::CRATE_HIR_ID;
 use rustc_index::vec::IndexVec;
 use rustc_infer::infer::canonical::QueryOutlivesConstraint;
@@ -2000,8 +2000,14 @@ fn check_member_constraints(
         let cause_code = path
             .iter()
             .find_map(|constraint| {
-                if let ConstraintCategory::Predicate(def_id, predicate_span) = constraint.category {
-                    Some(ObligationCauseCode::BindingObligation(def_id, predicate_span))
+                if let ConstraintCategory::Predicate(predicate_span) = constraint.category {
+                    // We currentl'y doesn't store the `DefId` in the `ConstraintCategory`
+                    // for perforamnce reasons. The error reporting code used by NLL only
+                    // uses the span, so this doesn't cause any problems at the moment.
+                    Some(ObligationCauseCode::BindingObligation(
+                        CRATE_DEF_ID.to_def_id(),
+                        predicate_span,
+                    ))
                 } else {
                     None
                 }
@@ -2106,7 +2112,7 @@ fn check_member_constraints(
                     | ConstraintCategory::Boring
                     | ConstraintCategory::BoringNoLocation
                     | ConstraintCategory::Internal
-                    | ConstraintCategory::Predicate(_, _) => false,
+                    | ConstraintCategory::Predicate(_) => false,
                     ConstraintCategory::TypeAnnotation
                     | ConstraintCategory::Return(_)
                     | ConstraintCategory::Yield => true,
@@ -2118,7 +2124,7 @@ fn check_member_constraints(
                     | ConstraintCategory::Boring
                     | ConstraintCategory::BoringNoLocation
                     | ConstraintCategory::Internal
-                    | ConstraintCategory::Predicate(_, _) => false,
+                    | ConstraintCategory::Predicate(_) => false,
                     _ => true,
                 }
             }
index 7ff74e4b96e97305fe9878b2319ebc3bdc056bd2..df28fb6e28e06acbcaaaf222ed85e8f26d0a62e2 100644 (file)
@@ -101,7 +101,9 @@ pub(super) fn prove_trait_ref(
 
     pub(super) fn normalize_and_prove_instantiated_predicates(
         &mut self,
-        def_id: DefId,
+        // Keep this parameter for now, in case we start using
+        // it in `ConstraintCategory` at some point.
+        _def_id: DefId,
         instantiated_predicates: ty::InstantiatedPredicates<'tcx>,
         locations: Locations,
     ) {
@@ -111,7 +113,7 @@ pub(super) fn normalize_and_prove_instantiated_predicates(
             .zip(instantiated_predicates.spans.into_iter())
         {
             let predicate = self.normalize(predicate, locations);
-            self.prove_predicate(predicate, locations, ConstraintCategory::Predicate(def_id, span));
+            self.prove_predicate(predicate, locations, ConstraintCategory::Predicate(span));
         }
     }
 
index 8d206d3eb1d22c06b4bfa85a90686eddacf5ad47..d5541d7890c77de20e6906d5ee913dc8c02aa804 100644 (file)
@@ -309,6 +309,9 @@ pub struct ClosureOutlivesRequirement<'tcx> {
     pub category: ConstraintCategory,
 }
 
+// Make sure this enum doesn't unintentionally grow
+rustc_data_structures::static_assert_size!(ConstraintCategory, 12);
+
 /// Outlives-constraints can be categorized to determine whether and why they
 /// are interesting (for error reporting). Order of variants indicates sort
 /// order of the category, thereby influencing diagnostic output.
@@ -341,7 +344,7 @@ pub enum ConstraintCategory {
     /// A constraint from a user-written predicate
     /// with the provided span, written on the item
     /// with the given `DefId`
-    Predicate(DefId, Span),
+    Predicate(Span),
 
     /// A "boring" constraint (caused by the given location) is one that
     /// the user probably doesn't want to see described in diagnostics,