]> git.lizzy.rs Git - rust.git/blob - src/librustc_mir/monomorphize/mod.rs
Rollup merge of #75837 - GuillaumeGomez:fix-font-color-help-button, r=Cldfire
[rust.git] / src / librustc_mir / monomorphize / mod.rs
1 use rustc_middle::traits;
2 use rustc_middle::ty::adjustment::CustomCoerceUnsized;
3 use rustc_middle::ty::{self, Ty, TyCtxt};
4
5 use rustc_hir::lang_items::LangItem;
6
7 pub mod collector;
8 pub mod partitioning;
9 pub mod polymorphize;
10
11 pub fn custom_coerce_unsize_info<'tcx>(
12     tcx: TyCtxt<'tcx>,
13     source_ty: Ty<'tcx>,
14     target_ty: Ty<'tcx>,
15 ) -> CustomCoerceUnsized {
16     let def_id = tcx.require_lang_item(LangItem::CoerceUnsized, None);
17
18     let trait_ref = ty::Binder::bind(ty::TraitRef {
19         def_id,
20         substs: tcx.mk_substs_trait(source_ty, &[target_ty.into()]),
21     });
22
23     match tcx.codegen_fulfill_obligation((ty::ParamEnv::reveal_all(), trait_ref)) {
24         Ok(traits::ImplSourceUserDefined(traits::ImplSourceUserDefinedData {
25             impl_def_id,
26             ..
27         })) => tcx.coerce_unsized_info(impl_def_id).custom_kind.unwrap(),
28         impl_source => {
29             bug!("invalid `CoerceUnsized` impl_source: {:?}", impl_source);
30         }
31     }
32 }