@@ -7,6 +7,7 @@ use rustc_errors::{Applicability, Diagnostic, PResult, msg};
77use rustc_feature:: { Features , GatedCfg , find_gated_cfg} ;
88use rustc_hir:: attrs:: CfgEntry ;
99use rustc_hir:: { AttrPath , RustcVersion , Target } ;
10+ use rustc_lint_defs:: builtin:: EMPTY_CFG_PREDICATE ;
1011use rustc_parse:: parser:: { ForceCollect , Parser , Recovery } ;
1112use rustc_parse:: { exp, parse_in} ;
1213use rustc_session:: Session ;
@@ -19,6 +20,7 @@ use thin_vec::ThinVec;
1920
2021use crate :: attributes:: AttributeSafety ;
2122use crate :: context:: { AcceptContext , ShouldEmit } ;
23+ use crate :: diagnostics:: EmptyCfgPredictate ;
2224use crate :: parser:: {
2325 AllowExprMetavar , ArgParser , MetaItemListParser , MetaItemOrLitParser , NameValueParser ,
2426} ;
@@ -92,14 +94,42 @@ pub fn parse_cfg_entry(
9294 } ;
9395 CfgEntry :: Not ( Box :: new ( parse_cfg_entry ( cx, single) ?) , list. span )
9496 }
95- Some ( sym:: any) => CfgEntry :: Any (
96- list. mixed ( ) . flat_map ( |sub_item| parse_cfg_entry ( cx, sub_item) ) . collect ( ) ,
97- list. span ,
98- ) ,
99- Some ( sym:: all) => CfgEntry :: All (
100- list. mixed ( ) . flat_map ( |sub_item| parse_cfg_entry ( cx, sub_item) ) . collect ( ) ,
101- list. span ,
102- ) ,
97+ Some ( sym:: any) => {
98+ if list. is_empty ( ) && !list. span . from_expansion ( ) {
99+ let span = meta. span ( ) ;
100+ cx. emit_lint (
101+ EMPTY_CFG_PREDICATE ,
102+ EmptyCfgPredictate {
103+ predicate_span : span,
104+ predicate : sym:: any,
105+ lit : false ,
106+ } ,
107+ span,
108+ ) ;
109+ }
110+ CfgEntry :: Any (
111+ list. mixed ( ) . flat_map ( |sub_item| parse_cfg_entry ( cx, sub_item) ) . collect ( ) ,
112+ list. span ,
113+ )
114+ }
115+ Some ( sym:: all) => {
116+ if list. is_empty ( ) && !list. span . from_expansion ( ) {
117+ let span = meta. span ( ) ;
118+ cx. emit_lint (
119+ EMPTY_CFG_PREDICATE ,
120+ EmptyCfgPredictate {
121+ predicate_span : span,
122+ predicate : sym:: all,
123+ lit : true ,
124+ } ,
125+ span,
126+ ) ;
127+ }
128+ CfgEntry :: All (
129+ list. mixed ( ) . flat_map ( |sub_item| parse_cfg_entry ( cx, sub_item) ) . collect ( ) ,
130+ list. span ,
131+ )
132+ }
103133 Some ( sym:: target) => parse_cfg_entry_target ( cx, list, meta. span ( ) ) ?,
104134 Some ( sym:: version) => parse_cfg_entry_version ( cx, list, meta. span ( ) ) ?,
105135 _ => {
0 commit comments