@@ -64,6 +64,7 @@ use rustc_resolve as resolve;
6464use rustc_save_analysis as save;
6565use rustc_save_analysis:: DumpHandler ;
6666use rustc_data_structures:: sync:: Lrc ;
67+ use rustc_data_structures:: OnDrop ;
6768use rustc:: session:: { self , config, Session , build_session, CompileResult } ;
6869use rustc:: session:: CompileIncomplete ;
6970use rustc:: session:: config:: { Input , PrintRequest , ErrorOutputType } ;
@@ -516,30 +517,35 @@ fn run_compiler_impl<'a>(args: &[String],
516517 target_features:: add_configuration ( & mut cfg, & sess, & * trans) ;
517518 sess. parse_sess . config = cfg;
518519
519- let plugins = sess. opts . debugging_opts . extra_plugins . clone ( ) ;
520-
521- let cstore = CStore :: new ( trans. metadata_loader ( ) ) ;
522-
523- do_or_return ! ( callbacks. late_callback( & * trans,
524- & matches,
525- & sess,
526- & cstore,
527- & input,
528- & odir,
529- & ofile) , Some ( sess) ) ;
530-
531- let control = callbacks. build_controller ( & sess, & matches) ;
532-
533- ( driver:: compile_input ( trans,
534- & sess,
535- & cstore,
536- & input_file_path,
537- & input,
538- & odir,
539- & ofile,
540- Some ( plugins) ,
541- & control) ,
542- Some ( sess) )
520+ let result = {
521+ let plugins = sess. opts . debugging_opts . extra_plugins . clone ( ) ;
522+
523+ let cstore = CStore :: new ( trans. metadata_loader ( ) ) ;
524+
525+ do_or_return ! ( callbacks. late_callback( & * trans,
526+ & matches,
527+ & sess,
528+ & cstore,
529+ & input,
530+ & odir,
531+ & ofile) , Some ( sess) ) ;
532+
533+ let _sess_abort_error = OnDrop ( || sess. diagnostic ( ) . print_error_count ( ) ) ;
534+
535+ let control = callbacks. build_controller ( & sess, & matches) ;
536+
537+ driver:: compile_input ( trans,
538+ & sess,
539+ & cstore,
540+ & input_file_path,
541+ & input,
542+ & odir,
543+ & ofile,
544+ Some ( plugins) ,
545+ & control)
546+ } ;
547+
548+ ( result, Some ( sess) )
543549}
544550
545551// Extract output directory and file from matches.
0 commit comments