@@ -526,14 +526,41 @@ impl TestProps {
526
526
self . check_test_line_numbers_match = config. parse_check_test_line_numbers_match ( ln) ;
527
527
}
528
528
529
- if config. parse_name_directive ( ln, "check-pass" ) ||
530
- config. parse_name_directive ( ln, "skip-codegen" ) {
531
- self . pass_mode = Some ( PassMode :: Check ) ;
532
- } else if config. parse_name_directive ( ln, "build-pass" ) ||
533
- config. parse_name_directive ( ln, "compile-pass" ) {
534
- self . pass_mode = Some ( PassMode :: Build ) ;
529
+ let check_no_run = |s| {
530
+ if config. mode != Mode :: Ui && config. mode != Mode :: Incremental {
531
+ panic ! ( "`{}` header is only supported in UI and incremental tests" , s) ;
532
+ }
533
+ if config. mode == Mode :: Incremental &&
534
+ !cfg. map_or ( false , |r| r. starts_with ( "cfail" ) ) &&
535
+ !self . revisions . iter ( ) . all ( |r| r. starts_with ( "cfail" ) ) {
536
+ panic ! ( "`{}` header is only supported in `cfail` incremental tests" , s) ;
537
+ }
538
+ } ;
539
+ let pass_mode = if config. parse_name_directive ( ln, "check-pass" ) {
540
+ check_no_run ( "check-pass" ) ;
541
+ Some ( PassMode :: Check )
542
+ } else if config. parse_name_directive ( ln, "skip-codegen" ) {
543
+ check_no_run ( "skip-codegen" ) ;
544
+ Some ( PassMode :: Check )
545
+ } else if config. parse_name_directive ( ln, "build-pass" ) {
546
+ check_no_run ( "build-pass" ) ;
547
+ Some ( PassMode :: Build )
548
+ } else if config. parse_name_directive ( ln, "compile-pass" ) {
549
+ check_no_run ( "compile-pass" ) ;
550
+ Some ( PassMode :: Build )
535
551
} else if config. parse_name_directive ( ln, "run-pass" ) {
536
- self . pass_mode = Some ( PassMode :: Run ) ;
552
+ if config. mode != Mode :: Ui && config. mode != Mode :: RunPass /* compatibility */ {
553
+ panic ! ( "`run-pass` header is only supported in UI tests" )
554
+ }
555
+ Some ( PassMode :: Run )
556
+ } else {
557
+ None
558
+ } ;
559
+ match ( self . pass_mode , pass_mode) {
560
+ ( None , Some ( _) ) => self . pass_mode = pass_mode,
561
+ ( Some ( _) , Some ( pm) ) if pm == PassMode :: Check => self . pass_mode = pass_mode,
562
+ ( Some ( _) , Some ( _) ) => panic ! ( "multiple `*-pass` headers in a single test" ) ,
563
+ ( _, None ) => { }
537
564
}
538
565
539
566
if !self . disable_ui_testing_normalization {
0 commit comments