@@ -271,18 +271,14 @@ fn module_codegen(
271
271
cgu_name,
272
272
) ;
273
273
super :: predefine_mono_items ( tcx, & mut module, & mono_items) ;
274
- let mut cached_context = Context :: new ( ) ;
274
+ let mut codegened_functions = vec ! [ ] ;
275
275
for ( mono_item, _) in mono_items {
276
276
match mono_item {
277
277
MonoItem :: Fn ( inst) => {
278
278
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) ;
286
282
} ) ;
287
283
}
288
284
MonoItem :: Static ( def_id) => crate :: constant:: codegen_static ( tcx, & mut module, def_id) ,
@@ -302,6 +298,11 @@ fn module_codegen(
302
298
let cgu_name = cgu. name ( ) . as_str ( ) . to_owned ( ) ;
303
299
304
300
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
+
305
306
let global_asm_object_file =
306
307
crate :: global_asm:: compile_global_asm ( & global_asm_config, & cgu_name, & cx. global_asm ) ?;
307
308
0 commit comments