@@ -523,7 +523,7 @@ pub struct Condition {
523
523
524
524
/// Tests if a cfg-pattern matches the cfg set
525
525
pub fn cfg_matches (
526
- cfg : & ast:: MetaItem ,
526
+ cfg : & ast:: NestedMetaItem ,
527
527
sess : & Session ,
528
528
lint_node_id : NodeId ,
529
529
features : Option < & Features > ,
@@ -594,12 +594,26 @@ pub fn parse_version(s: Symbol) -> Option<RustcVersion> {
594
594
/// Evaluate a cfg-like condition (with `any` and `all`), using `eval` to
595
595
/// evaluate individual items.
596
596
pub fn eval_condition (
597
- cfg : & ast:: MetaItem ,
597
+ cfg : & ast:: NestedMetaItem ,
598
598
sess : & Session ,
599
599
features : Option < & Features > ,
600
600
eval : & mut impl FnMut ( Condition ) -> bool ,
601
601
) -> bool {
602
602
let dcx = sess. dcx ( ) ;
603
+
604
+ let cfg = match cfg {
605
+ ast:: NestedMetaItem :: MetaItem ( meta_item) => meta_item,
606
+ _ => {
607
+ dcx. emit_err ( session_diagnostics:: UnsupportedLiteral {
608
+ span : cfg. span ( ) ,
609
+ reason : UnsupportedLiteralReason :: Generic ,
610
+ is_bytestr : false ,
611
+ start_point_span : sess. source_map ( ) . start_point ( cfg. span ( ) ) ,
612
+ } ) ;
613
+ return false ;
614
+ }
615
+ } ;
616
+
603
617
match & cfg. kind {
604
618
ast:: MetaItemKind :: List ( mis) if cfg. name_or_empty ( ) == sym:: version => {
605
619
try_gate_cfg ( sym:: version, cfg. span , sess, features) ;
@@ -653,23 +667,19 @@ pub fn eval_condition(
653
667
. iter ( )
654
668
// We don't use any() here, because we want to evaluate all cfg condition
655
669
// as eval_condition can (and does) extra checks
656
- . fold ( false , |res, mi| {
657
- res | eval_condition ( mi. meta_item ( ) . unwrap ( ) , sess, features, eval)
658
- } ) ,
670
+ . fold ( false , |res, mi| res | eval_condition ( mi, sess, features, eval) ) ,
659
671
sym:: all => mis
660
672
. iter ( )
661
673
// We don't use all() here, because we want to evaluate all cfg condition
662
674
// as eval_condition can (and does) extra checks
663
- . fold ( true , |res, mi| {
664
- res & eval_condition ( mi. meta_item ( ) . unwrap ( ) , sess, features, eval)
665
- } ) ,
675
+ . fold ( true , |res, mi| res & eval_condition ( mi, sess, features, eval) ) ,
666
676
sym:: not => {
667
677
let [ mi] = mis. as_slice ( ) else {
668
678
dcx. emit_err ( session_diagnostics:: ExpectedOneCfgPattern { span : cfg. span } ) ;
669
679
return false ;
670
680
} ;
671
681
672
- !eval_condition ( mi. meta_item ( ) . unwrap ( ) , sess, features, eval)
682
+ !eval_condition ( mi, sess, features, eval)
673
683
}
674
684
sym:: target => {
675
685
if let Some ( features) = features
@@ -690,7 +700,12 @@ pub fn eval_condition(
690
700
seg. ident . name = Symbol :: intern ( & format ! ( "target_{}" , seg. ident. name) ) ;
691
701
}
692
702
693
- res & eval_condition ( & mi, sess, features, eval)
703
+ res & eval_condition (
704
+ & ast:: NestedMetaItem :: MetaItem ( mi) ,
705
+ sess,
706
+ features,
707
+ eval,
708
+ )
694
709
} )
695
710
}
696
711
_ => {
0 commit comments