@@ -276,67 +276,61 @@ pub struct Config {
276276 pub registry : Registry ,
277277}
278278
279- pub 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 ( & mut sess. parse_sess ) ;
304+ }
305+
306+ let temps_dir = sess. opts . unstable_opts . temps_dir . as_ref ( ) . map ( |o| PathBuf :: from ( & o) ) ;
307+
308+ let compiler = Compiler {
309+ sess : Lrc :: new ( sess) ,
310+ codegen_backend : Lrc :: new ( codegen_backend) ,
311+ input : config. input ,
312+ input_path : config. input_path ,
313+ output_dir : config. output_dir ,
314+ output_file : config. output_file ,
315+ temps_dir,
316+ register_lints : config. register_lints ,
317+ override_queries : config. override_queries ,
318+ } ;
319+
320+ rustc_span:: with_source_map ( compiler. sess . parse_sess . clone_source_map ( ) , move || {
321+ let r = {
322+ let _sess_abort_error = OnDrop ( || {
323+ compiler. sess . finish_diagnostics ( registry) ;
324+ } ) ;
325+
326+ f ( & compiler)
327+ } ;
328+
329+ let prof = compiler. sess . prof . clone ( ) ;
330+ prof. generic_activity ( "drop_compiler" ) . run ( move || drop ( compiler) ) ;
331+ r
332+ } )
333+ } ,
340334 )
341335}
342336
0 commit comments