@@ -23,6 +23,7 @@ extern crate rustc_metadata;
2323extern crate rustc_middle;
2424extern crate rustc_session;
2525extern crate rustc_span;
26+ extern crate rustc_ty_utils;
2627
2728use std:: env:: { self , VarError } ;
2829use std:: num:: NonZero ;
@@ -50,7 +51,8 @@ use rustc_middle::middle::exported_symbols::{
5051} ;
5152use rustc_middle:: query:: LocalCrate ;
5253use rustc_middle:: traits:: { ObligationCause , ObligationCauseCode } ;
53- use rustc_middle:: ty:: { self , Ty , TyCtxt } ;
54+ use rustc_middle:: ty:: layout:: { LayoutError , TyAndLayout } ;
55+ use rustc_middle:: ty:: { self , PseudoCanonicalInput , Ty , TyCtxt } ;
5456use rustc_middle:: util:: Providers ;
5557use rustc_session:: config:: { CrateType , ErrorOutputType , OptLevel } ;
5658use rustc_session:: search_paths:: PathKind ;
@@ -143,6 +145,13 @@ impl rustc_driver::Callbacks for MiriCompilerCalls {
143145 Arc :: make_mut ( & mut crate_source) . rlib = Some ( ( PathBuf :: new ( ) , PathKind :: All ) ) ;
144146 crate_source
145147 } ;
148+
149+ assert ! ( std:: ptr:: fn_addr_eq( providers. layout_of, rustc_ty_utils:: layout_of as
150+ for <' tcx> fn ( TyCtxt <' tcx>, PseudoCanonicalInput <' tcx, Ty <' tcx>>) -> Result <TyAndLayout <' tcx>, & ' tcx LayoutError <' tcx>>) ) ;
151+ providers. layout_of = |tcx, query| {
152+ let _span = tracing:: info_span!( "tcx.layout_of" , "query = {:?}" , query. value. kind( ) ) . entered ( ) ;
153+ rustc_ty_utils:: layout_of ( tcx, query)
154+ } ;
146155 } ) ;
147156 }
148157
0 commit comments