@@ -1133,69 +1133,21 @@ fn testdir(builder: &Builder<'_>, host: TargetSelection) -> PathBuf {
11331133    builder. out . join ( host) . join ( "test" ) 
11341134} 
11351135
1136- macro_rules!  default_test { 
1137-     ( $name: ident {  path:  $path: expr,  mode:  $mode: expr,  suite:  $suite: expr } )  => { 
1138-         test!( $name {  path:  $path,  mode:  $mode,  suite:  $suite,  default :  true ,  host:  false  } ) ; 
1139-     } ; 
1140- } 
1141- 
1142- macro_rules!  default_test_with_compare_mode { 
1143-     ( $name: ident {  path:  $path: expr,  mode:  $mode: expr,  suite:  $suite: expr, 
1144-                    compare_mode:  $compare_mode: expr } )  => { 
1145-         test_with_compare_mode!( $name { 
1146-             path:  $path, 
1147-             mode:  $mode, 
1148-             suite:  $suite, 
1149-             default :  true , 
1150-             host:  false , 
1151-             compare_mode:  $compare_mode
1152-         } ) ; 
1153-     } ; 
1154- } 
1155- 
1156- macro_rules!  host_test { 
1157-     ( $name: ident {  path:  $path: expr,  mode:  $mode: expr,  suite:  $suite: expr } )  => { 
1158-         test!( $name {  path:  $path,  mode:  $mode,  suite:  $suite,  default :  true ,  host:  true  } ) ; 
1159-     } ; 
1160- } 
1161- 
1136+ /// Declares a test step that invokes compiletest on a particular test suite. 
11621137macro_rules!  test { 
1163-     ( $name: ident {  path:  $path: expr,  mode:  $mode: expr,  suite:  $suite: expr,  default :  $default: expr, 
1164-                    host:  $host: expr } )  => { 
1165-         test_definitions!( $name { 
1166-             path:  $path, 
1167-             mode:  $mode, 
1168-             suite:  $suite, 
1169-             default :  $default, 
1170-             host:  $host, 
1171-             compare_mode:  None 
1172-         } ) ; 
1173-     } ; 
1174- } 
1175- 
1176- macro_rules!  test_with_compare_mode { 
1177-     ( $name: ident {  path:  $path: expr,  mode:  $mode: expr,  suite:  $suite: expr,  default :  $default: expr, 
1178-                    host:  $host: expr,  compare_mode:  $compare_mode: expr } )  => { 
1179-         test_definitions!( $name { 
1180-             path:  $path, 
1181-             mode:  $mode, 
1182-             suite:  $suite, 
1183-             default :  $default, 
1184-             host:  $host, 
1185-             compare_mode:  Some ( $compare_mode) 
1186-         } ) ; 
1187-     } ; 
1188- } 
1189- 
1190- macro_rules!  test_definitions { 
1191-     ( $name: ident { 
1192-         path:  $path: expr, 
1193-         mode:  $mode: expr, 
1194-         suite:  $suite: expr, 
1195-         default :  $default: expr, 
1196-         host:  $host: expr, 
1197-         compare_mode:  $compare_mode: expr
1198-     } )  => { 
1138+     ( 
1139+         $(  #[ $attr: meta]  ) *  // allow docstrings and attributes 
1140+         $name: ident { 
1141+             path:  $path: expr, 
1142+             mode:  $mode: expr, 
1143+             suite:  $suite: expr, 
1144+             default :  $default: expr
1145+             $(  ,  only_hosts:  $only_hosts: expr ) ? // default: false 
1146+             $(  ,  compare_mode:  $compare_mode: expr ) ? // default: None 
1147+             $(  ,  ) ? // optional trailing comma 
1148+         } 
1149+     )  => { 
1150+         $(  #[ $attr]  ) * 
11991151        #[ derive( Debug ,  Clone ,  PartialEq ,  Eq ,  Hash ) ] 
12001152        pub  struct  $name { 
12011153            pub  compiler:  Compiler , 
@@ -1205,7 +1157,12 @@ macro_rules! test_definitions {
12051157        impl  Step  for  $name { 
12061158            type  Output  = ( ) ; 
12071159            const  DEFAULT :  bool  = $default; 
1208-             const  ONLY_HOSTS :  bool  = $host; 
1160+             const  ONLY_HOSTS :  bool  = ( const  { 
1161+                 #[ allow( unused_assignments,  unused_mut) ] 
1162+                 let  mut  value = false ; 
1163+                 $(  value = $only_hosts;  ) ?
1164+                 value
1165+             } ) ; 
12091166
12101167            fn  should_run( run:  ShouldRun <' _>)  -> ShouldRun <' _> { 
12111168                run. suite_path( $path) 
@@ -1224,21 +1181,31 @@ macro_rules! test_definitions {
12241181                    mode:  $mode, 
12251182                    suite:  $suite, 
12261183                    path:  $path, 
1227-                     compare_mode:  $compare_mode, 
1184+                     compare_mode:  ( const  { 
1185+                         #[ allow( unused_assignments,  unused_mut) ] 
1186+                         let  mut  value = None ; 
1187+                         $(  value = $compare_mode;  ) ?
1188+                         value
1189+                     } ) , 
12281190                } ) 
12291191            } 
12301192        } 
12311193    } ; 
12321194} 
12331195
12341196/// Declares an alias for running the [`Coverage`] tests in only one mode. 
1235- /// Adapted from [`test_definitions `]. 
1197+ /// Adapted from [`test `]. 
12361198macro_rules!  coverage_test_alias { 
1237-     ( $name: ident { 
1238-         alias_and_mode:  $alias_and_mode: expr,  // &'static str 
1239-         default :  $default: expr,  // bool 
1240-         only_hosts:  $only_hosts: expr $( , ) ? // bool 
1241-     } )  => { 
1199+     ( 
1200+         $(  #[ $attr: meta]  ) *  // allow docstrings and attributes 
1201+         $name: ident { 
1202+             alias_and_mode:  $alias_and_mode: expr,  // &'static str 
1203+             default :  $default: expr,  // bool 
1204+             only_hosts:  $only_hosts: expr // bool 
1205+             $(  ,  ) ? // optional trailing comma 
1206+         } 
1207+     )  => { 
1208+         $(  #[ $attr]  ) * 
12421209        #[ derive( Debug ,  Clone ,  PartialEq ,  Eq ,  Hash ) ] 
12431210        pub  struct  $name { 
12441211            pub  compiler:  Compiler , 
@@ -1410,37 +1377,74 @@ impl Step for CrateBuildHelper {
14101377    } 
14111378} 
14121379
1413- default_test ! ( Ui  {  path:  "tests/ui" ,  mode:  "ui" ,  suite:  "ui"  } ) ; 
1380+ test ! ( Ui  {  path:  "tests/ui" ,  mode:  "ui" ,  suite:  "ui" ,   default :   true  } ) ; 
14141381
1415- default_test ! ( Crashes  {  path:  "tests/crashes" ,  mode:  "crashes" ,  suite:  "crashes"  } ) ; 
1382+ test ! ( Crashes  {  path:  "tests/crashes" ,  mode:  "crashes" ,  suite:  "crashes" ,   default :   true  } ) ; 
14161383
1417- default_test ! ( Codegen  {  path:  "tests/codegen" ,  mode:  "codegen" ,  suite:  "codegen"  } ) ; 
1384+ test ! ( Codegen  {  path:  "tests/codegen" ,  mode:  "codegen" ,  suite:  "codegen" ,   default :   true  } ) ; 
14181385
1419- default_test ! ( CodegenUnits  { 
1386+ test ! ( CodegenUnits  { 
14201387    path:  "tests/codegen-units" , 
14211388    mode:  "codegen-units" , 
1422-     suite:  "codegen-units" 
1389+     suite:  "codegen-units" , 
1390+     default :  true , 
14231391} ) ; 
14241392
1425- default_test ! ( Incremental  {  path:  "tests/incremental" ,  mode:  "incremental" ,  suite:  "incremental"  } ) ; 
1393+ test ! ( Incremental  { 
1394+     path:  "tests/incremental" , 
1395+     mode:  "incremental" , 
1396+     suite:  "incremental" , 
1397+     default :  true , 
1398+ } ) ; 
14261399
1427- default_test_with_compare_mode ! ( Debuginfo  { 
1400+ test ! ( Debuginfo  { 
14281401    path:  "tests/debuginfo" , 
14291402    mode:  "debuginfo" , 
14301403    suite:  "debuginfo" , 
1431-     compare_mode:  "split-dwarf" 
1404+     default :  true , 
1405+     compare_mode:  Some ( "split-dwarf" ) , 
14321406} ) ; 
14331407
1434- host_test ! ( UiFullDeps  {  path:  "tests/ui-fulldeps" ,  mode:  "ui" ,  suite:  "ui-fulldeps"  } ) ; 
1408+ test ! ( UiFullDeps  { 
1409+     path:  "tests/ui-fulldeps" , 
1410+     mode:  "ui" , 
1411+     suite:  "ui-fulldeps" , 
1412+     default :  true , 
1413+     only_hosts:  true , 
1414+ } ) ; 
14351415
1436- host_test ! ( Rustdoc  {  path:  "tests/rustdoc" ,  mode:  "rustdoc" ,  suite:  "rustdoc"  } ) ; 
1437- host_test ! ( RustdocUi  {  path:  "tests/rustdoc-ui" ,  mode:  "ui" ,  suite:  "rustdoc-ui"  } ) ; 
1416+ test ! ( Rustdoc  { 
1417+     path:  "tests/rustdoc" , 
1418+     mode:  "rustdoc" , 
1419+     suite:  "rustdoc" , 
1420+     default :  true , 
1421+     only_hosts:  true , 
1422+ } ) ; 
1423+ test ! ( RustdocUi  { 
1424+     path:  "tests/rustdoc-ui" , 
1425+     mode:  "ui" , 
1426+     suite:  "rustdoc-ui" , 
1427+     default :  true , 
1428+     only_hosts:  true , 
1429+ } ) ; 
14381430
1439- host_test ! ( RustdocJson  {  path:  "tests/rustdoc-json" ,  mode:  "rustdoc-json" ,  suite:  "rustdoc-json"  } ) ; 
1431+ test ! ( RustdocJson  { 
1432+     path:  "tests/rustdoc-json" , 
1433+     mode:  "rustdoc-json" , 
1434+     suite:  "rustdoc-json" , 
1435+     default :  true , 
1436+     only_hosts:  true , 
1437+ } ) ; 
14401438
1441- host_test ! ( Pretty  {  path:  "tests/pretty" ,  mode:  "pretty" ,  suite:  "pretty"  } ) ; 
1439+ test ! ( Pretty  { 
1440+     path:  "tests/pretty" , 
1441+     mode:  "pretty" , 
1442+     suite:  "pretty" , 
1443+     default :  true , 
1444+     only_hosts:  true , 
1445+ } ) ; 
14421446
1443- /// Special-handling is needed for `run-make`, so don't use `default_test ` for defining `RunMake` 
1447+ /// Special-handling is needed for `run-make`, so don't use `test! ` for defining `RunMake` 
14441448/// tests. 
14451449#[ derive( Debug ,  Copy ,  Clone ,  PartialEq ,  Eq ,  Hash ) ]  
14461450pub  struct  RunMake  { 
@@ -1475,7 +1479,7 @@ impl Step for RunMake {
14751479    } 
14761480} 
14771481
1478- default_test ! ( Assembly  {  path:  "tests/assembly" ,  mode:  "assembly" ,  suite:  "assembly"  } ) ; 
1482+ test ! ( Assembly  {  path:  "tests/assembly" ,  mode:  "assembly" ,  suite:  "assembly" ,   default :   true  } ) ; 
14791483
14801484/// Coverage tests are a bit more complicated than other test suites, because 
14811485/// we want to run the same set of test files in multiple different modes, 
@@ -1552,27 +1556,33 @@ impl Step for Coverage {
15521556    } 
15531557} 
15541558
1555- // Runs `tests/coverage` in "coverage-map" mode only. 
1556- // Used by `x test` and `x test coverage-map`. 
1557- coverage_test_alias ! ( CoverageMap  { 
1558-     alias_and_mode:  "coverage-map" , 
1559-     default :  true , 
1560-     only_hosts:  false , 
1561- } ) ; 
1562- // Runs `tests/coverage` in "coverage-run" mode only. 
1563- // Used by `x test` and `x test coverage-run`. 
1564- coverage_test_alias ! ( CoverageRun  { 
1565-     alias_and_mode:  "coverage-run" , 
1566-     default :  true , 
1567-     // Compiletest knows how to automatically skip these tests when cross-compiling, 
1568-     // but skipping the whole step here makes it clearer that they haven't run at all. 
1569-     only_hosts:  true , 
1570- } ) ; 
1559+ coverage_test_alias !  { 
1560+     /// Runs the `tests/coverage` test suite in "coverage-map" mode only. 
1561+ /// Used by `x test` and `x test coverage-map`. 
1562+ CoverageMap  { 
1563+         alias_and_mode:  "coverage-map" , 
1564+         default :  true , 
1565+         only_hosts:  false , 
1566+     } 
1567+ } 
1568+ coverage_test_alias !  { 
1569+     /// Runs the `tests/coverage` test suite in "coverage-run" mode only. 
1570+ /// Used by `x test` and `x test coverage-run`. 
1571+ CoverageRun  { 
1572+         alias_and_mode:  "coverage-run" , 
1573+         default :  true , 
1574+         // Compiletest knows how to automatically skip these tests when cross-compiling, 
1575+         // but skipping the whole step here makes it clearer that they haven't run at all. 
1576+         only_hosts:  true , 
1577+     } 
1578+ } 
15711579
1572- host_test ! ( CoverageRunRustdoc  { 
1580+ test ! ( CoverageRunRustdoc  { 
15731581    path:  "tests/coverage-run-rustdoc" , 
15741582    mode:  "coverage-run" , 
1575-     suite:  "coverage-run-rustdoc" 
1583+     suite:  "coverage-run-rustdoc" , 
1584+     default :  true , 
1585+     only_hosts:  true , 
15761586} ) ; 
15771587
15781588// For the mir-opt suite we do not use macros, as we need custom behavior when blessing. 
0 commit comments