@@ -3,6 +3,7 @@ use std::iter;
33use rustc_index:: IndexVec ;
44use rustc_index:: bit_set:: DenseBitSet ;
55use rustc_middle:: middle:: codegen_fn_attrs:: CodegenFnAttrFlags ;
6+ use rustc_middle:: mir:: mono:: { InstantiationMode , MonoItem } ;
67use rustc_middle:: mir:: { Body , Local , UnwindTerminateReason , traversal} ;
78use rustc_middle:: ty:: layout:: { FnAbiOf , HasTyCtxt , HasTypingEnv , TyAndLayout } ;
89use rustc_middle:: ty:: { self , Instance , Ty , TyCtxt , TypeFoldable , TypeVisitableExt } ;
@@ -168,7 +169,12 @@ pub fn lower_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
168169 let tcx = cx. tcx ( ) ;
169170 let llfn = cx. get_fn ( instance) ;
170171
171- let mut mir = tcx. codegen_mir ( instance) ;
172+ let mut mir = match MonoItem :: Fn ( instance) . instantiation_mode ( tcx) {
173+ InstantiationMode :: LocalCopy => tcx. build_codegen_mir ( instance) ,
174+ InstantiationMode :: GloballyShared { .. } => {
175+ rustc_mir_transform:: build_codegen_mir ( tcx, instance)
176+ }
177+ } ;
172178
173179 let fn_abi = cx. fn_abi_of_instance ( instance, ty:: List :: empty ( ) ) ;
174180 debug ! ( "fn_abi: {:?}" , fn_abi) ;
0 commit comments