@@ -276,67 +276,65 @@ pub struct Config {
276276 pub registry : Registry ,
277277}
278278
279- fn create_compiler_and_run < R > ( config : Config , f : impl FnOnce ( & Compiler ) -> R ) -> R {
280- crate :: callbacks:: setup_callbacks ( ) ;
281-
282- let registry = & config. registry ;
283- let ( mut sess, codegen_backend) = util:: create_session (
284- config. opts ,
285- config. crate_cfg ,
286- config. crate_check_cfg ,
287- config. diagnostic_output ,
288- config. file_loader ,
289- config. input_path . clone ( ) ,
290- config. lint_caps ,
291- config. make_codegen_backend ,
292- registry. clone ( ) ,
293- ) ;
294-
295- if let Some ( parse_sess_created) = config. parse_sess_created {
296- parse_sess_created (
297- & mut Lrc :: get_mut ( & mut sess)
298- . expect ( "create_session() should never share the returned session" )
299- . parse_sess ,
300- ) ;
301- }
302-
303- let temps_dir = sess. opts . unstable_opts . temps_dir . as_ref ( ) . map ( |o| PathBuf :: from ( & o) ) ;
304-
305- let compiler = Compiler {
306- sess,
307- codegen_backend,
308- input : config. input ,
309- input_path : config. input_path ,
310- output_dir : config. output_dir ,
311- output_file : config. output_file ,
312- temps_dir,
313- register_lints : config. register_lints ,
314- override_queries : config. override_queries ,
315- } ;
316-
317- rustc_span:: with_source_map ( compiler. sess . parse_sess . clone_source_map ( ) , move || {
318- let r = {
319- let _sess_abort_error = OnDrop ( || {
320- compiler. sess . finish_diagnostics ( registry) ;
321- } ) ;
322-
323- f ( & compiler)
324- } ;
325-
326- let prof = compiler. sess . prof . clone ( ) ;
327- prof. generic_activity ( "drop_compiler" ) . run ( move || drop ( compiler) ) ;
328- r
329- } )
330- }
331-
332279// JUSTIFICATION: before session exists, only config
333280#[ allow( rustc:: bad_opt_access) ]
334281pub fn run_compiler < R : Send > ( config : Config , f : impl FnOnce ( & Compiler ) -> R + Send ) -> R {
335282 trace ! ( "run_compiler" ) ;
336283 util:: run_in_thread_pool_with_globals (
337284 config. opts . edition ,
338285 config. opts . unstable_opts . threads ,
339- || create_compiler_and_run ( config, f) ,
286+ || {
287+ crate :: callbacks:: setup_callbacks ( ) ;
288+
289+ let registry = & config. registry ;
290+ let ( mut sess, codegen_backend) = util:: create_session (
291+ config. opts ,
292+ config. crate_cfg ,
293+ config. crate_check_cfg ,
294+ config. diagnostic_output ,
295+ config. file_loader ,
296+ config. input_path . clone ( ) ,
297+ config. lint_caps ,
298+ config. make_codegen_backend ,
299+ registry. clone ( ) ,
300+ ) ;
301+
302+ if let Some ( parse_sess_created) = config. parse_sess_created {
303+ parse_sess_created (
304+ & mut Lrc :: get_mut ( & mut sess)
305+ . expect ( "create_session() should never share the returned session" )
306+ . parse_sess ,
307+ ) ;
308+ }
309+
310+ let temps_dir = sess. opts . unstable_opts . temps_dir . as_ref ( ) . map ( |o| PathBuf :: from ( & o) ) ;
311+
312+ let compiler = Compiler {
313+ sess,
314+ codegen_backend,
315+ input : config. input ,
316+ input_path : config. input_path ,
317+ output_dir : config. output_dir ,
318+ output_file : config. output_file ,
319+ temps_dir,
320+ register_lints : config. register_lints ,
321+ override_queries : config. override_queries ,
322+ } ;
323+
324+ rustc_span:: with_source_map ( compiler. sess . parse_sess . clone_source_map ( ) , move || {
325+ let r = {
326+ let _sess_abort_error = OnDrop ( || {
327+ compiler. sess . finish_diagnostics ( registry) ;
328+ } ) ;
329+
330+ f ( & compiler)
331+ } ;
332+
333+ let prof = compiler. sess . prof . clone ( ) ;
334+ prof. generic_activity ( "drop_compiler" ) . run ( move || drop ( compiler) ) ;
335+ r
336+ } )
337+ } ,
340338 )
341339}
342340
0 commit comments