]> git.lizzy.rs Git - rust.git/commitdiff
cleanup WithOptConstParam queries
authorBastian Kauschke <bastian_kauschke@hotmail.de>
Sun, 4 Oct 2020 21:20:00 +0000 (23:20 +0200)
committerBastian Kauschke <bastian_kauschke@hotmail.de>
Sun, 4 Oct 2020 21:22:08 +0000 (23:22 +0200)
compiler/rustc_middle/src/mir/query.rs
compiler/rustc_middle/src/ty/mod.rs
compiler/rustc_mir/src/interpret/eval_context.rs
compiler/rustc_mir/src/transform/mod.rs
compiler/rustc_trait_selection/src/traits/const_evaluatable.rs

index 0878e9313d8c5d6153a836330fc00fb85eb29de2..1aadf6c8d6f2a52fae45eb5b9b9873fac96e7847 100644 (file)
@@ -1,9 +1,10 @@
 //! Values computed by queries that use MIR.
 
-use crate::mir::{Body, Promoted};
+use crate::mir::{abstract_const, Body, Promoted};
 use crate::ty::{self, Ty, TyCtxt};
 use rustc_data_structures::fx::FxHashMap;
 use rustc_data_structures::sync::Lrc;
+use rustc_errors::ErrorReported;
 use rustc_hir as hir;
 use rustc_hir::def_id::{DefId, LocalDefId};
 use rustc_index::bit_set::BitMatrix;
@@ -407,7 +408,12 @@ pub struct CoverageInfo {
     pub num_expressions: u32,
 }
 
+/// Shims which make dealing with `WithOptConstParam` easier.
+///
+/// For more information on why this is needed, consider looking
+/// at the docs for `WithOptConstParam` itself.
 impl<'tcx> TyCtxt<'tcx> {
+    #[inline]
     pub fn mir_borrowck_opt_const_arg(
         self,
         def: ty::WithOptConstParam<LocalDefId>,
@@ -419,6 +425,7 @@ pub fn mir_borrowck_opt_const_arg(
         }
     }
 
+    #[inline]
     pub fn mir_const_qualif_opt_const_arg(
         self,
         def: ty::WithOptConstParam<LocalDefId>,
@@ -430,6 +437,7 @@ pub fn mir_const_qualif_opt_const_arg(
         }
     }
 
+    #[inline]
     pub fn promoted_mir_of_opt_const_arg(
         self,
         def: ty::WithOptConstParam<DefId>,
@@ -440,4 +448,28 @@ pub fn promoted_mir_of_opt_const_arg(
             self.promoted_mir(def.did)
         }
     }
+
+    #[inline]
+    pub fn optimized_mir_of_opt_const_arg(
+        self,
+        def: ty::WithOptConstParam<DefId>,
+    ) -> &'tcx Body<'tcx> {
+        if let Some((did, param_did)) = def.as_const_arg() {
+            self.optimized_mir_of_const_arg((did, param_did))
+        } else {
+            self.optimized_mir(def.did)
+        }
+    }
+
+    #[inline]
+    pub fn mir_abstract_const_of_opt_const_arg(
+        self,
+        def: ty::WithOptConstParam<DefId>,
+    ) -> Result<Option<&'tcx [abstract_const::Node<'tcx>]>, ErrorReported> {
+        if let Some((did, param_did)) = def.as_const_arg() {
+            self.mir_abstract_const_of_const_arg((did, param_did))
+        } else {
+            self.mir_abstract_const(def.did)
+        }
+    }
 }
index b7530c077ccd126e61690596214279a6dda4a989..92116a6a69b11e28d4413cd2ed14cd7f233a5a40 100644 (file)
@@ -2953,13 +2953,7 @@ pub fn item_name(self, id: DefId) -> Symbol {
     /// Returns the possibly-auto-generated MIR of a `(DefId, Subst)` pair.
     pub fn instance_mir(self, instance: ty::InstanceDef<'tcx>) -> &'tcx Body<'tcx> {
         match instance {
-            ty::InstanceDef::Item(def) => {
-                if let Some((did, param_did)) = def.as_const_arg() {
-                    self.optimized_mir_of_const_arg((did, param_did))
-                } else {
-                    self.optimized_mir(def.did)
-                }
-            }
+            ty::InstanceDef::Item(def) => self.optimized_mir_of_opt_const_arg(def),
             ty::InstanceDef::VtableShim(..)
             | ty::InstanceDef::ReifyShim(..)
             | ty::InstanceDef::Intrinsic(..)
index 93da6e3d38a93c71df5a1491dda6cf2eae02b893..3339ffdfda4ce98a5fa38c1e9d60bf06645acd31 100644 (file)
@@ -482,11 +482,7 @@ pub fn load_mir(
         match instance {
             ty::InstanceDef::Item(def) => {
                 if self.tcx.is_mir_available(def.did) {
-                    if let Some((did, param_did)) = def.as_const_arg() {
-                        Ok(self.tcx.optimized_mir_of_const_arg((did, param_did)))
-                    } else {
-                        Ok(self.tcx.optimized_mir(def.did))
-                    }
+                    Ok(self.tcx.optimized_mir_of_opt_const_arg(def))
                 } else {
                     throw_unsup!(NoMirFor(def.did))
                 }
index 67193814a40cb7e1323a7836b3c68016a876db1c..a4dd1c9165ed1442559649ee879c90451d508aca 100644 (file)
@@ -332,11 +332,7 @@ fn mir_promoted(
     // this point, before we steal the mir-const result.
     // Also this means promotion can rely on all const checks having been done.
     let _ = tcx.mir_const_qualif_opt_const_arg(def);
-    let _ = if let Some(param_did) = def.const_param_did {
-        tcx.mir_abstract_const_of_const_arg((def.did, param_did))
-    } else {
-        tcx.mir_abstract_const(def.did.to_def_id())
-    };
+    let _ = tcx.mir_abstract_const_of_opt_const_arg(def.to_global());
     let mut body = tcx.mir_const(def).steal();
 
     let mut required_consts = Vec::new();
index 3828cf4d30210b89e35a471883b0768a59ea937a..e0a79cbbf53b43f274723fdcd0094f5ce7ce80eb 100644 (file)
@@ -147,11 +147,7 @@ enum FailureKind {
     if concrete.is_ok() && substs.has_param_types_or_consts() {
         match infcx.tcx.def_kind(def.did) {
             DefKind::AnonConst => {
-                let mir_body = if let Some(def) = def.as_const_arg() {
-                    infcx.tcx.optimized_mir_of_const_arg(def)
-                } else {
-                    infcx.tcx.optimized_mir(def.did)
-                };
+                let mir_body = infcx.tcx.optimized_mir_of_opt_const_arg(def);
 
                 if mir_body.is_polymorphic {
                     future_compat_lint();
@@ -212,13 +208,7 @@ pub fn new(
         def: ty::WithOptConstParam<DefId>,
         substs: SubstsRef<'tcx>,
     ) -> Result<Option<AbstractConst<'tcx>>, ErrorReported> {
-        let inner = match (def.did.as_local(), def.const_param_did) {
-            (Some(did), Some(param_did)) => {
-                tcx.mir_abstract_const_of_const_arg((did, param_did))?
-            }
-            _ => tcx.mir_abstract_const(def.did)?,
-        };
-
+        let inner = tcx.mir_abstract_const_of_opt_const_arg(def)?;
         Ok(inner.map(|inner| AbstractConst { inner, substs }))
     }