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