@@ -525,38 +525,40 @@ pub fn cfg_matches(
525525) -> bool {
526526 eval_condition ( cfg, sess, features, & mut |cfg| {
527527 try_gate_cfg ( cfg. name , cfg. span , sess, features) ;
528- match sess. psess . check_config . expecteds . get ( & cfg. name ) {
529- Some ( ExpectedValues :: Some ( values) ) if !values. contains ( & cfg. value ) => {
530- sess. psess . buffer_lint_with_diagnostic (
531- UNEXPECTED_CFGS ,
532- cfg. span ,
533- lint_node_id,
534- if let Some ( value) = cfg. value {
535- format ! ( "unexpected `cfg` condition value: `{value}`" )
536- } else {
537- format ! ( "unexpected `cfg` condition value: (none)" )
538- } ,
539- BuiltinLintDiag :: UnexpectedCfgValue (
540- ( cfg. name , cfg. name_span ) ,
541- cfg. value . map ( |v| ( v, cfg. value_span . unwrap ( ) ) ) ,
542- ) ,
543- ) ;
544- }
545- None if sess. psess . check_config . exhaustive_names => {
546- sess. psess . buffer_lint_with_diagnostic (
547- UNEXPECTED_CFGS ,
548- cfg. span ,
549- lint_node_id,
550- format ! ( "unexpected `cfg` condition name: `{}`" , cfg. name) ,
551- BuiltinLintDiag :: UnexpectedCfgName (
552- ( cfg. name , cfg. name_span ) ,
553- cfg. value . map ( |v| ( v, cfg. value_span . unwrap ( ) ) ) ,
554- ) ,
555- ) ;
528+ sess. psess . config_cache . get ( & ( cfg. name , cfg. value ) ) . copied ( ) . unwrap_or_else ( || {
529+ match sess. psess . check_config . expecteds . get ( & cfg. name ) {
530+ Some ( ExpectedValues :: Some ( values) ) if !values. contains ( & cfg. value ) => {
531+ sess. psess . buffer_lint_with_diagnostic (
532+ UNEXPECTED_CFGS ,
533+ cfg. span ,
534+ lint_node_id,
535+ if let Some ( value) = cfg. value {
536+ format ! ( "unexpected `cfg` condition value: `{value}`" )
537+ } else {
538+ format ! ( "unexpected `cfg` condition value: (none)" )
539+ } ,
540+ BuiltinLintDiag :: UnexpectedCfgValue (
541+ ( cfg. name , cfg. name_span ) ,
542+ cfg. value . map ( |v| ( v, cfg. value_span . unwrap ( ) ) ) ,
543+ ) ,
544+ ) ;
545+ }
546+ None if sess. psess . check_config . exhaustive_names => {
547+ sess. psess . buffer_lint_with_diagnostic (
548+ UNEXPECTED_CFGS ,
549+ cfg. span ,
550+ lint_node_id,
551+ format ! ( "unexpected `cfg` condition name: `{}`" , cfg. name) ,
552+ BuiltinLintDiag :: UnexpectedCfgName (
553+ ( cfg. name , cfg. name_span ) ,
554+ cfg. value . map ( |v| ( v, cfg. value_span . unwrap ( ) ) ) ,
555+ ) ,
556+ ) ;
557+ }
558+ _ => { /* not unexpected */ }
556559 }
557- _ => { /* not unexpected */ }
558- }
559- sess. psess . config . contains ( & ( cfg. name , cfg. value ) )
560+ sess. psess . config . contains ( & ( cfg. name , cfg. value ) )
561+ } )
560562 } )
561563}
562564
0 commit comments