@@ -114,8 +114,8 @@ impl Command {
114114 Command :: Check { features, flags } => Self :: check ( features, flags) ,
115115 Command :: Test { bless, target, coverage, features, flags } =>
116116 Self :: test ( bless, target, coverage, features, flags) ,
117- Command :: Run { dep, quiet, target, edition, features, flags } =>
118- Self :: run ( dep, quiet, target, edition, features, flags) ,
117+ Command :: Run { dep, native , quiet, target, edition, features, flags } =>
118+ Self :: run ( dep, native , quiet, target, edition, features, flags) ,
119119 Command :: Doc { features, flags } => Self :: doc ( features, flags) ,
120120 Command :: Fmt { flags } => Self :: fmt ( flags) ,
121121 Command :: Clippy { features, flags } => Self :: clippy ( features, flags) ,
@@ -465,15 +465,18 @@ impl Command {
465465
466466 fn run (
467467 dep : bool ,
468+ native : bool ,
468469 quiet : bool ,
469470 target : Option < String > ,
470471 edition : Option < String > ,
471472 features : Vec < String > ,
472473 flags : Vec < String > ,
473474 ) -> Result < ( ) > {
474475 let mut e = MiriEnv :: new ( ) ?;
476+ let run_via_ui_test = dep || native;
475477
476478 // Preparation: get a sysroot, and get the miri binary.
479+ // We do this even for native run as it also builds Miri itself.
477480 let miri_sysroot =
478481 e. build_miri_sysroot ( /* quiet */ quiet, target. as_deref ( ) , & features) ?;
479482 let miri_bin = e
@@ -484,44 +487,45 @@ impl Command {
484487 // (because `flags` may contain `--`).
485488 let mut early_flags = Vec :: < OsString > :: new ( ) ;
486489
487- // In `dep` mode, the target is already passed via `MIRI_TEST_TARGET`
488- if !dep {
490+ // In ui_test mode, the target is already passed via `MIRI_TEST_TARGET`
491+ if !run_via_ui_test {
489492 if let Some ( target) = & target {
490493 early_flags. push ( "--target" . into ( ) ) ;
491494 early_flags. push ( target. into ( ) ) ;
492495 }
493496 }
494497 early_flags. push ( "--edition" . into ( ) ) ;
495498 early_flags. push ( edition. as_deref ( ) . unwrap_or ( "2021" ) . into ( ) ) ;
496- early_flags. push ( "--sysroot" . into ( ) ) ;
497- early_flags. push ( miri_sysroot. into ( ) ) ;
499+ if !native {
500+ early_flags. push ( "--sysroot" . into ( ) ) ;
501+ early_flags. push ( miri_sysroot. into ( ) ) ;
502+ }
498503
499504 // Compute flags.
500505 let miri_flags = e. sh . var ( "MIRIFLAGS" ) . unwrap_or_default ( ) ;
501506 let miri_flags = flagsplit ( & miri_flags) ;
502- let quiet_flag = if quiet { Some ( "--quiet" ) } else { None } ;
503507
504508 // Run Miri.
505509 // The basic command that executes the Miri driver.
506- let mut cmd = if dep {
510+ let mut cmd = if run_via_ui_test {
507511 // We invoke the test suite as that has all the logic for running with dependencies.
508- e. cargo_cmd ( "." , "test" , & features)
512+ let mut cmd = e
513+ . cargo_cmd ( "." , "test" , & features)
509514 . args ( & [ "--test" , "ui" ] )
510- . args ( quiet_flag)
515+ // This does not show anything useful so we always hide it.
516+ . arg ( "--quiet" )
511517 . arg ( "--" )
512- . args ( & [ "--miri-run-dep-mode" ] )
518+ . env ( "MIRI_RUN_MODE" , if native { "native" } else { "1" } ) ;
519+ if let Some ( target) = & target {
520+ cmd = cmd. env ( "MIRI_TEST_TARGET" , target) ;
521+ }
522+ cmd
513523 } else {
514524 cmd ! ( e. sh, "{miri_bin}" )
515525 } ;
516526 cmd. set_quiet ( quiet) ;
517527 // Add Miri flags
518- let mut cmd = cmd. args ( & miri_flags) . args ( & early_flags) . args ( & flags) ;
519- // For `--dep` we also need to set the target in the env var.
520- if dep {
521- if let Some ( target) = & target {
522- cmd = cmd. env ( "MIRI_TEST_TARGET" , target) ;
523- }
524- }
528+ let cmd = cmd. args ( & miri_flags) . args ( & early_flags) . args ( & flags) ;
525529 // Finally, run the thing.
526530 Ok ( cmd. run ( ) ?)
527531 }
0 commit comments