@@ -5,6 +5,7 @@ use std::path::PathBuf;
5
5
6
6
use cargo_platform:: CfgExpr ;
7
7
use cargo_util:: { paths, ProcessBuilder } ;
8
+ use im_rc:: HashSet ;
8
9
9
10
use super :: BuildContext ;
10
11
use crate :: core:: compiler:: { CompileKind , Metadata , Unit } ;
@@ -398,14 +399,22 @@ fn target_runner(
398
399
return Ok ( Some ( ( path, v. args ) ) ) ;
399
400
}
400
401
402
+ let mut invalid_cfgs: HashSet < String > = HashSet :: default ( ) ;
401
403
// try target.'cfg(...)'.runner
402
404
let target_cfg = bcx. target_data . info ( kind) . cfg ( ) ;
403
405
let mut cfgs = bcx
404
406
. config
405
407
. target_cfgs ( ) ?
406
408
. iter ( )
407
409
. filter_map ( |( key, cfg) | cfg. runner . as_ref ( ) . map ( |runner| ( key, runner) ) )
408
- . filter ( |( key, _runner) | CfgExpr :: matches_key ( key, target_cfg) ) ;
410
+ . filter ( |( key, _runner) | {
411
+ if !CfgExpr :: is_valid_key ( key) {
412
+ invalid_cfgs. insert ( key. to_string ( ) ) ;
413
+ return false ;
414
+ }
415
+ CfgExpr :: matches_key ( key, target_cfg)
416
+ } ) ;
417
+
409
418
let matching_runner = cfgs. next ( ) ;
410
419
if let Some ( ( key, runner) ) = cfgs. next ( ) {
411
420
anyhow:: bail!(
@@ -418,6 +427,13 @@ fn target_runner(
418
427
runner. definition
419
428
) ;
420
429
}
430
+ if !invalid_cfgs. is_empty ( ) {
431
+ bcx. config . shell ( ) . warn ( format ! (
432
+ "invalid target configuration key{}: {}" ,
433
+ if invalid_cfgs. len( ) == 1 { "" } else { "s" } ,
434
+ invalid_cfgs. into_iter( ) . collect:: <Vec <_>>( ) . join( ", " )
435
+ ) ) ?;
436
+ }
421
437
Ok ( matching_runner. map ( |( _k, runner) | {
422
438
(
423
439
runner. val . path . clone ( ) . resolve_program ( bcx. config ) ,
0 commit comments