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`].
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
,
14 use rustc_trait_selection
::traits
::query
::{CanonicalTyGoal, NoSolution}
;
16 pub(crate) fn provide(p
: &mut Providers
) {
17 *p
= Providers { implied_outlives_bounds_compat, ..*p }
;
18 *p
= Providers { implied_outlives_bounds, ..*p }
;
21 fn implied_outlives_bounds_compat
<'tcx
>(
23 goal
: CanonicalTyGoal
<'tcx
>,
25 &'tcx Canonical
<'tcx
, canonical
::QueryResponse
<'tcx
, Vec
<OutlivesBound
<'tcx
>>>>,
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
)
34 fn implied_outlives_bounds
<'tcx
>(
36 goal
: CanonicalTyGoal
<'tcx
>,
38 &'tcx Canonical
<'tcx
, canonical
::QueryResponse
<'tcx
, Vec
<OutlivesBound
<'tcx
>>>>,
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
)