]> git.proxmox.com Git - rustc.git/blob - compiler/rustc_traits/src/implied_outlives_bounds.rs
bump version to 1.80.1+dfsg1-1~bpo12+pve1
[rustc.git] / compiler / rustc_traits / src / implied_outlives_bounds.rs
1 //! Provider for the `implied_outlives_bounds` query.
2 //! Do not call this query directory. See
3 //! [`rustc_trait_selection::traits::query::type_op::implied_outlives_bounds`].
4
5 use rustc_infer::infer::canonical::{self, Canonical};
6 use rustc_infer::infer::TyCtxtInferExt;
7 use rustc_infer::traits::query::OutlivesBound;
8 use rustc_middle::query::Providers;
9 use rustc_middle::ty::TyCtxt;
10 use rustc_trait_selection::infer::InferCtxtBuilderExt;
11 use rustc_trait_selection::traits::query::type_op::implied_outlives_bounds::{
12 compute_implied_outlives_bounds_compat_inner, compute_implied_outlives_bounds_inner,
13 };
14 use rustc_trait_selection::traits::query::{CanonicalTyGoal, NoSolution};
15
16 pub(crate) fn provide(p: &mut Providers) {
17 *p = Providers { implied_outlives_bounds_compat, ..*p };
18 *p = Providers { implied_outlives_bounds, ..*p };
19 }
20
21 fn implied_outlives_bounds_compat<'tcx>(
22 tcx: TyCtxt<'tcx>,
23 goal: CanonicalTyGoal<'tcx>,
24 ) -> Result<
25 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, Vec<OutlivesBound<'tcx>>>>,
26 NoSolution,
27 > {
28 tcx.infer_ctxt().enter_canonical_trait_query(&goal, |ocx, key| {
29 let (param_env, ty) = key.into_parts();
30 compute_implied_outlives_bounds_compat_inner(ocx, param_env, ty)
31 })
32 }
33
34 fn implied_outlives_bounds<'tcx>(
35 tcx: TyCtxt<'tcx>,
36 goal: CanonicalTyGoal<'tcx>,
37 ) -> Result<
38 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, Vec<OutlivesBound<'tcx>>>>,
39 NoSolution,
40 > {
41 tcx.infer_ctxt().enter_canonical_trait_query(&goal, |ocx, key| {
42 let (param_env, ty) = key.into_parts();
43 compute_implied_outlives_bounds_inner(ocx, param_env, ty)
44 })
45 }