@@ -69,8 +69,8 @@ pub fn compile_input(sess: Session,
69
69
let state = $make_state;
70
70
( control. $point. callback) ( state) ;
71
71
72
- $tsess. abort_if_errors( ) ;
73
72
if control. $point. stop == Compilation :: Stop {
73
+ $tsess. abort_if_errors( ) ;
74
74
return ;
75
75
}
76
76
} ) }
@@ -470,7 +470,11 @@ pub fn phase_2_configure_and_expand(sess: &Session,
470
470
471
471
let mut feature_gated_cfgs = vec ! [ ] ;
472
472
krate = time ( time_passes, "configuration 1" , || {
473
- syntax:: config:: strip_unconfigured_items ( sess. diagnostic ( ) , krate, & mut feature_gated_cfgs)
473
+ sess. abort_if_new_errors ( || {
474
+ syntax:: config:: strip_unconfigured_items ( sess. diagnostic ( ) ,
475
+ krate,
476
+ & mut feature_gated_cfgs)
477
+ } )
474
478
} ) ;
475
479
476
480
* sess. crate_types . borrow_mut ( ) = collect_crate_types ( sess, & krate. attrs ) ;
@@ -481,13 +485,15 @@ pub fn phase_2_configure_and_expand(sess: &Session,
481
485
} ) ;
482
486
483
487
time ( time_passes, "gated macro checking" , || {
484
- let features = syntax:: feature_gate:: check_crate_macros ( sess. codemap ( ) ,
485
- & sess. parse_sess . span_diagnostic ,
486
- & krate) ;
487
-
488
- // these need to be set "early" so that expansion sees `quote` if enabled.
489
- * sess. features . borrow_mut ( ) = features;
490
- sess. abort_if_errors ( ) ;
488
+ sess. abort_if_new_errors ( || {
489
+ let features =
490
+ syntax:: feature_gate:: check_crate_macros ( sess. codemap ( ) ,
491
+ & sess. parse_sess . span_diagnostic ,
492
+ & krate) ;
493
+
494
+ // these need to be set "early" so that expansion sees `quote` if enabled.
495
+ * sess. features . borrow_mut ( ) = features;
496
+ } ) ;
491
497
} ) ;
492
498
493
499
@@ -525,7 +531,7 @@ pub fn phase_2_configure_and_expand(sess: &Session,
525
531
let Registry { syntax_exts, early_lint_passes, late_lint_passes, lint_groups,
526
532
llvm_passes, attributes, .. } = registry;
527
533
528
- {
534
+ sess . abort_if_new_errors ( || {
529
535
let mut ls = sess. lint_store . borrow_mut ( ) ;
530
536
for pass in early_lint_passes {
531
537
ls. register_early_pass ( Some ( sess) , true , pass) ;
@@ -540,17 +546,14 @@ pub fn phase_2_configure_and_expand(sess: &Session,
540
546
541
547
* sess. plugin_llvm_passes . borrow_mut ( ) = llvm_passes;
542
548
* sess. plugin_attributes . borrow_mut ( ) = attributes. clone ( ) ;
543
- }
549
+ } ) ;
544
550
545
551
// Lint plugins are registered; now we can process command line flags.
546
552
if sess. opts . describe_lints {
547
553
super :: describe_lints ( & * sess. lint_store . borrow ( ) , true ) ;
548
554
return None ;
549
555
}
550
- sess. lint_store . borrow_mut ( ) . process_command_line ( sess) ;
551
-
552
- // Abort if there are errors from lint processing or a plugin registrar.
553
- sess. abort_if_errors ( ) ;
556
+ sess. abort_if_new_errors ( || sess. lint_store . borrow_mut ( ) . process_command_line ( sess) ) ;
554
557
555
558
krate = time ( time_passes, "expansion" , || {
556
559
// Windows dlls do not have rpaths, so they don't know how to find their
@@ -594,29 +597,36 @@ pub fn phase_2_configure_and_expand(sess: &Session,
594
597
// much as possible (e.g. help the programmer avoid platform
595
598
// specific differences)
596
599
time ( time_passes, "complete gated feature checking 1" , || {
597
- let features = syntax:: feature_gate:: check_crate ( sess. codemap ( ) ,
598
- & sess. parse_sess . span_diagnostic ,
599
- & krate,
600
- & attributes,
601
- sess. opts . unstable_features ) ;
602
- * sess. features . borrow_mut ( ) = features;
603
- sess. abort_if_errors ( ) ;
600
+ sess. abort_if_new_errors ( || {
601
+ let features = syntax:: feature_gate:: check_crate ( sess. codemap ( ) ,
602
+ & sess. parse_sess . span_diagnostic ,
603
+ & krate,
604
+ & attributes,
605
+ sess. opts . unstable_features ) ;
606
+ * sess. features . borrow_mut ( ) = features;
607
+ } ) ;
604
608
} ) ;
605
609
606
610
// JBC: make CFG processing part of expansion to avoid this problem:
607
611
608
612
// strip again, in case expansion added anything with a #[cfg].
609
- krate = time ( time_passes, "configuration 2" , || {
610
- syntax:: config:: strip_unconfigured_items ( sess. diagnostic ( ) , krate, & mut feature_gated_cfgs)
611
- } ) ;
613
+ krate = sess. abort_if_new_errors ( || {
614
+ let krate = time ( time_passes, "configuration 2" , || {
615
+ syntax:: config:: strip_unconfigured_items ( sess. diagnostic ( ) ,
616
+ krate,
617
+ & mut feature_gated_cfgs)
618
+ } ) ;
612
619
613
- time ( time_passes, "gated configuration checking" , || {
614
- let features = sess. features . borrow ( ) ;
615
- feature_gated_cfgs. sort ( ) ;
616
- feature_gated_cfgs. dedup ( ) ;
617
- for cfg in & feature_gated_cfgs {
618
- cfg. check_and_emit ( sess. diagnostic ( ) , & features, sess. codemap ( ) ) ;
619
- }
620
+ time ( time_passes, "gated configuration checking" , || {
621
+ let features = sess. features . borrow ( ) ;
622
+ feature_gated_cfgs. sort ( ) ;
623
+ feature_gated_cfgs. dedup ( ) ;
624
+ for cfg in & feature_gated_cfgs {
625
+ cfg. check_and_emit ( sess. diagnostic ( ) , & features, sess. codemap ( ) ) ;
626
+ }
627
+ } ) ;
628
+
629
+ krate
620
630
} ) ;
621
631
622
632
krate = time ( time_passes, "maybe building test harness" , || {
@@ -639,13 +649,14 @@ pub fn phase_2_configure_and_expand(sess: &Session,
639
649
// later, to make sure we've got everything (e.g. configuration
640
650
// can insert new attributes via `cfg_attr`)
641
651
time ( time_passes, "complete gated feature checking 2" , || {
642
- let features = syntax:: feature_gate:: check_crate ( sess. codemap ( ) ,
643
- & sess. parse_sess . span_diagnostic ,
644
- & krate,
645
- & attributes,
646
- sess. opts . unstable_features ) ;
647
- * sess. features . borrow_mut ( ) = features;
648
- sess. abort_if_errors ( ) ;
652
+ sess. abort_if_new_errors ( || {
653
+ let features = syntax:: feature_gate:: check_crate ( sess. codemap ( ) ,
654
+ & sess. parse_sess . span_diagnostic ,
655
+ & krate,
656
+ & attributes,
657
+ sess. opts . unstable_features ) ;
658
+ * sess. features . borrow_mut ( ) = features;
659
+ } ) ;
649
660
} ) ;
650
661
651
662
time ( time_passes,
@@ -711,9 +722,11 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(sess: &'tcx Session,
711
722
"external crate/lib resolution" ,
712
723
|| LocalCrateReader :: new ( sess, cstore, & hir_map) . read_crates ( krate) ) ;
713
724
714
- let lang_items = time ( time_passes,
715
- "language item collection" ,
716
- || middle:: lang_items:: collect_language_items ( & sess, & hir_map) ) ;
725
+ let lang_items = time ( time_passes, "language item collection" , || {
726
+ sess. abort_if_new_errors ( || {
727
+ middle:: lang_items:: collect_language_items ( & sess, & hir_map)
728
+ } )
729
+ } ) ;
717
730
718
731
let resolve:: CrateMap {
719
732
def_map,
0 commit comments