@@ -523,7 +523,7 @@ pub struct Condition {
523523
524524/// Tests if a cfg-pattern matches the cfg set
525525pub fn cfg_matches (
526- cfg : & ast:: MetaItem ,
526+ cfg : & ast:: NestedMetaItem ,
527527 sess : & Session ,
528528 lint_node_id : NodeId ,
529529 features : Option < & Features > ,
@@ -594,12 +594,26 @@ pub fn parse_version(s: Symbol) -> Option<RustcVersion> {
594594/// Evaluate a cfg-like condition (with `any` and `all`), using `eval` to
595595/// evaluate individual items.
596596pub fn eval_condition (
597- cfg : & ast:: MetaItem ,
597+ cfg : & ast:: NestedMetaItem ,
598598 sess : & Session ,
599599 features : Option < & Features > ,
600600 eval : & mut impl FnMut ( Condition ) -> bool ,
601601) -> bool {
602602 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+
603617 match & cfg. kind {
604618 ast:: MetaItemKind :: List ( mis) if cfg. name_or_empty ( ) == sym:: version => {
605619 try_gate_cfg ( sym:: version, cfg. span , sess, features) ;
@@ -653,23 +667,19 @@ pub fn eval_condition(
653667 . iter ( )
654668 // We don't use any() here, because we want to evaluate all cfg condition
655669 // 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) ) ,
659671 sym:: all => mis
660672 . iter ( )
661673 // We don't use all() here, because we want to evaluate all cfg condition
662674 // 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) ) ,
666676 sym:: not => {
667677 let [ mi] = mis. as_slice ( ) else {
668678 dcx. emit_err ( session_diagnostics:: ExpectedOneCfgPattern { span : cfg. span } ) ;
669679 return false ;
670680 } ;
671681
672- !eval_condition ( mi. meta_item ( ) . unwrap ( ) , sess, features, eval)
682+ !eval_condition ( mi, sess, features, eval)
673683 }
674684 sym:: target => {
675685 if let Some ( features) = features
@@ -690,7 +700,12 @@ pub fn eval_condition(
690700 seg. ident . name = Symbol :: intern ( & format ! ( "target_{}" , seg. ident. name) ) ;
691701 }
692702
693- res & eval_condition ( & mi, sess, features, eval)
703+ res & eval_condition (
704+ & ast:: NestedMetaItem :: MetaItem ( mi) ,
705+ sess,
706+ features,
707+ eval,
708+ )
694709 } )
695710 }
696711 _ => {
0 commit comments