@@ -271,18 +271,14 @@ fn module_codegen(
271271 cgu_name,
272272 ) ;
273273 super :: predefine_mono_items ( tcx, & mut module, & mono_items) ;
274- let mut cached_context = Context :: new ( ) ;
274+ let mut codegened_functions = vec ! [ ] ;
275275 for ( mono_item, _) in mono_items {
276276 match mono_item {
277277 MonoItem :: Fn ( inst) => {
278278 tcx. sess . time ( "codegen fn" , || {
279- crate :: base:: codegen_and_compile_fn (
280- tcx,
281- & mut cx,
282- & mut cached_context,
283- & mut module,
284- inst,
285- )
279+ let codegened_function =
280+ crate :: base:: codegen_fn ( tcx, & mut cx, Function :: new ( ) , & mut module, inst) ;
281+ codegened_functions. push ( codegened_function) ;
286282 } ) ;
287283 }
288284 MonoItem :: Static ( def_id) => crate :: constant:: codegen_static ( tcx, & mut module, def_id) ,
@@ -302,6 +298,11 @@ fn module_codegen(
302298 let cgu_name = cgu. name ( ) . as_str ( ) . to_owned ( ) ;
303299
304300 OngoingModuleCodegen :: Async ( std:: thread:: spawn ( move || {
301+ let mut cached_context = Context :: new ( ) ;
302+ for codegened_func in codegened_functions {
303+ crate :: base:: compile_fn ( & mut cx, & mut cached_context, & mut module, codegened_func) ;
304+ }
305+
305306 let global_asm_object_file =
306307 crate :: global_asm:: compile_global_asm ( & global_asm_config, & cgu_name, & cx. global_asm ) ?;
307308
0 commit comments