@@ -7,8 +7,8 @@ use rustc_hir::def_id::DefId;
77use rustc_middle:: mir:: interpret:: { ErrorHandled , InvalidMetaKind , ReportedErrorInfo } ;
88use rustc_middle:: query:: TyCtxtAt ;
99use rustc_middle:: ty:: layout:: {
10- self , FnAbiError , FnAbiOfHelpers , FnAbiRequest , LayoutError , LayoutOf , LayoutOfHelpers ,
11- TyAndLayout ,
10+ self , FnAbiError , FnAbiOf , FnAbiOfHelpers , FnAbiRequest , LayoutError , LayoutOf ,
11+ LayoutOfHelpers , TyAndLayout ,
1212} ;
1313use rustc_middle:: ty:: { self , GenericArgsRef , Ty , TyCtxt , TypeFoldable , TypingEnv , Variance } ;
1414use rustc_middle:: { mir, span_bug} ;
@@ -92,20 +92,6 @@ impl<'tcx, M: Machine<'tcx>> LayoutOfHelpers<'tcx> for InterpCx<'tcx, M> {
9292 }
9393}
9494
95- impl < ' tcx , M : Machine < ' tcx > > InterpCx < ' tcx , M > {
96- /// This inherent method takes priority over the trait method with the same name in LayoutOf,
97- /// and allows wrapping the actual [LayoutOf::layout_of] with a tracing span.
98- /// See [LayoutOf::layout_of] for the original documentation.
99- #[ inline( always) ]
100- pub fn layout_of (
101- & self ,
102- ty : Ty < ' tcx > ,
103- ) -> <InterpCx < ' tcx , M > as LayoutOfHelpers < ' tcx > >:: LayoutOfResult {
104- let _span = enter_trace_span ! ( M , "InterpCx::layout_of" , "ty = {:?}" , ty. kind( ) ) ;
105- LayoutOf :: layout_of ( self , ty)
106- }
107- }
108-
10995impl < ' tcx , M : Machine < ' tcx > > FnAbiOfHelpers < ' tcx > for InterpCx < ' tcx , M > {
11096 type FnAbiOfResult = Result < & ' tcx FnAbi < ' tcx , Ty < ' tcx > > , InterpErrorKind < ' tcx > > ;
11197
@@ -121,6 +107,43 @@ impl<'tcx, M: Machine<'tcx>> FnAbiOfHelpers<'tcx> for InterpCx<'tcx, M> {
121107 }
122108}
123109
110+ impl < ' tcx , M : Machine < ' tcx > > InterpCx < ' tcx , M > {
111+ /// This inherent method takes priority over the trait method with the same name in LayoutOf,
112+ /// and allows wrapping the actual [LayoutOf::layout_of] with a tracing span.
113+ /// See [LayoutOf::layout_of] for the original documentation.
114+ #[ inline( always) ]
115+ pub fn layout_of ( & self , ty : Ty < ' tcx > ) -> <Self as LayoutOfHelpers < ' tcx > >:: LayoutOfResult {
116+ let _span = enter_trace_span ! ( M , "InterpCx::layout_of" , ty = ?ty. kind( ) ) ;
117+ LayoutOf :: layout_of ( self , ty)
118+ }
119+
120+ /// This inherent method takes priority over the trait method with the same name in FnAbiOf,
121+ /// and allows wrapping the actual [FnAbiOf::fn_abi_of_fn_ptr] with a tracing span.
122+ /// See [FnAbiOf::fn_abi_of_fn_ptr] for the original documentation.
123+ #[ inline( always) ]
124+ pub fn fn_abi_of_fn_ptr (
125+ & self ,
126+ sig : ty:: PolyFnSig < ' tcx > ,
127+ extra_args : & ' tcx ty:: List < Ty < ' tcx > > ,
128+ ) -> <Self as FnAbiOfHelpers < ' tcx > >:: FnAbiOfResult {
129+ let _span = enter_trace_span ! ( M , "InterpCx::fn_abi_of_fn_ptr" , ?sig, ?extra_args) ;
130+ FnAbiOf :: fn_abi_of_fn_ptr ( self , sig, extra_args)
131+ }
132+
133+ /// This inherent method takes priority over the trait method with the same name in FnAbiOf,
134+ /// and allows wrapping the actual [FnAbiOf::fn_abi_of_instance] with a tracing span.
135+ /// See [FnAbiOf::fn_abi_of_instance] for the original documentation.
136+ #[ inline( always) ]
137+ pub fn fn_abi_of_instance (
138+ & self ,
139+ instance : ty:: Instance < ' tcx > ,
140+ extra_args : & ' tcx ty:: List < Ty < ' tcx > > ,
141+ ) -> <Self as FnAbiOfHelpers < ' tcx > >:: FnAbiOfResult {
142+ let _span = enter_trace_span ! ( M , "InterpCx::fn_abi_of_instance" , ?instance, ?extra_args) ;
143+ FnAbiOf :: fn_abi_of_instance ( self , instance, extra_args)
144+ }
145+ }
146+
124147/// Test if it is valid for a MIR assignment to assign `src`-typed place to `dest`-typed value.
125148/// This test should be symmetric, as it is primarily about layout compatibility.
126149pub ( super ) fn mir_assign_valid_types < ' tcx > (
0 commit comments