@@ -103,7 +103,7 @@ fn parse_cfg_entry_version<S: Stage>(
103103 list : & MetaItemListParser ,
104104 meta_span : Span ,
105105) -> Result < CfgEntry , ErrorGuaranteed > {
106- try_gate_cfg ( sym:: version, meta_span, cx. sess ( ) , cx . features_option ( ) ) ;
106+ try_gate_cfg ( sym:: version, meta_span, cx) ;
107107 let Some ( version) = list. single ( ) else {
108108 return Err (
109109 cx. emit_err ( session_diagnostics:: ExpectedSingleVersionLiteral { span : list. span } )
@@ -135,7 +135,8 @@ fn parse_cfg_entry_target<S: Stage>(
135135 list : & MetaItemListParser ,
136136 meta_span : Span ,
137137) -> Result < CfgEntry , ErrorGuaranteed > {
138- if let Some ( features) = cx. features_option ( )
138+ if let ShouldEmit :: ErrorsAndLints = cx. should_emit
139+ && let Some ( features) = cx. features_option ( )
139140 && !features. cfg_target_compact ( )
140141 {
141142 feature_err (
@@ -180,7 +181,7 @@ pub(crate) fn parse_name_value<S: Stage>(
180181 span : Span ,
181182 cx : & mut AcceptContext < ' _ , ' _ , S > ,
182183) -> Result < CfgEntry , ErrorGuaranteed > {
183- try_gate_cfg ( name, span, cx. sess ( ) , cx . features_option ( ) ) ;
184+ try_gate_cfg ( name, span, cx) ;
184185
185186 let value = match value {
186187 None => None ,
@@ -294,11 +295,9 @@ pub fn parse_cfg_attr(
294295 sess : & Session ,
295296 features : Option < & Features > ,
296297) -> Option < ( CfgEntry , Vec < ( AttrItem , Span ) > ) > {
297- match cfg_attr. get_normal_item ( ) . args {
298- ast:: AttrArgs :: Delimited ( ast:: DelimArgs { dspan, delim, ref tokens } )
299- if !tokens. is_empty ( ) =>
300- {
301- check_cfg_attr_bad_delim ( & sess. psess , dspan, delim) ;
298+ match cfg_attr. get_normal_item ( ) . args . unparsed_ref ( ) . unwrap ( ) {
299+ ast:: AttrArgs :: Delimited ( ast:: DelimArgs { dspan, delim, tokens } ) if !tokens. is_empty ( ) => {
300+ check_cfg_attr_bad_delim ( & sess. psess , * dspan, * delim) ;
302301 match parse_in ( & sess. psess , tokens. clone ( ) , "`cfg_attr` input" , |p| {
303302 parse_cfg_attr_internal ( p, sess, features, cfg_attr)
304303 } ) {
@@ -322,7 +321,7 @@ pub fn parse_cfg_attr(
322321 }
323322 _ => {
324323 let ( span, reason) = if let ast:: AttrArgs :: Delimited ( ast:: DelimArgs { dspan, .. } ) =
325- cfg_attr. get_normal_item ( ) . args
324+ cfg_attr. get_normal_item ( ) . args . unparsed_ref ( ) ?
326325 {
327326 ( dspan. entire ( ) , AttributeParseErrorReason :: ExpectedAtLeastOneArgument )
328327 } else {
@@ -413,10 +412,13 @@ fn parse_cfg_attr_internal<'a>(
413412 Ok ( ( cfg_predicate, expanded_attrs) )
414413}
415414
416- fn try_gate_cfg ( name : Symbol , span : Span , sess : & Session , features : Option < & Features > ) {
415+ fn try_gate_cfg < S : Stage > ( name : Symbol , span : Span , cx : & mut AcceptContext < ' _ , ' _ , S > ) {
416+ if let ShouldEmit :: Nothing = cx. should_emit {
417+ return ;
418+ }
417419 let gate = find_gated_cfg ( |sym| sym == name) ;
418- if let ( Some ( feats) , Some ( gated_cfg) ) = ( features, gate) {
419- gate_cfg ( gated_cfg, span, sess, feats) ;
420+ if let ( Some ( feats) , Some ( gated_cfg) ) = ( cx . features , gate) {
421+ gate_cfg ( gated_cfg, span, cx . sess , feats) ;
420422 }
421423}
422424
0 commit comments