@@ -23,6 +23,7 @@ extern crate rustc_metadata;
23
23
extern crate rustc_middle;
24
24
extern crate rustc_session;
25
25
extern crate rustc_span;
26
+ extern crate rustc_ty_utils;
26
27
27
28
use std:: env:: { self , VarError } ;
28
29
use std:: num:: NonZero ;
@@ -50,7 +51,8 @@ use rustc_middle::middle::exported_symbols::{
50
51
} ;
51
52
use rustc_middle:: query:: LocalCrate ;
52
53
use 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 } ;
54
56
use rustc_middle:: util:: Providers ;
55
57
use rustc_session:: config:: { CrateType , ErrorOutputType , OptLevel } ;
56
58
use rustc_session:: search_paths:: PathKind ;
@@ -143,6 +145,13 @@ impl rustc_driver::Callbacks for MiriCompilerCalls {
143
145
Arc :: make_mut ( & mut crate_source) . rlib = Some ( ( PathBuf :: new ( ) , PathKind :: All ) ) ;
144
146
crate_source
145
147
} ;
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
+ } ;
146
155
} ) ;
147
156
}
148
157
0 commit comments