@@ -71,27 +71,31 @@ pub(crate) fn parse_cfg(dcx: DiagCtxtHandle<'_>, cfgs: Vec<String>) -> Cfg {
7171
7272            match  new_parser_from_source_str ( & psess,  filename,  s. to_string ( ) ,  StripTokens :: Nothing ) 
7373            { 
74-                 Ok ( mut  parser)  => match  parser. parse_meta_item ( AllowLeadingUnsafe :: No )  { 
75-                     Ok ( meta_item)  if  parser. token  == token:: Eof  => { 
76-                         if  meta_item. path . segments . len ( )  != 1  { 
77-                             error ! ( "argument key must be an identifier" ) ; 
78-                         } 
79-                         match  & meta_item. kind  { 
80-                             MetaItemKind :: List ( ..)  => { } 
81-                             MetaItemKind :: NameValue ( lit)  if  !lit. kind . is_str ( )  => { 
82-                                 error ! ( "argument value must be a string" ) ; 
74+                 Ok ( mut  parser)  => { 
75+                     parser. parse_cfg_pred  = true ; 
76+ 
77+                     match  parser. parse_meta_item ( AllowLeadingUnsafe :: No )  { 
78+                         Ok ( meta_item)  if  parser. token  == token:: Eof  => { 
79+                             if  meta_item. path . segments . len ( )  != 1  { 
80+                                 error ! ( "argument key must be an identifier" ) ; 
8381                            } 
84-                             MetaItemKind :: NameValue ( ..)  | MetaItemKind :: Word  => { 
85-                                 let  ident = meta_item. ident ( ) . expect ( "multi-segment cfg key" ) ; 
86-                                 return  ( ident. name ,  meta_item. value_str ( ) ) ; 
82+                             match  & meta_item. kind  { 
83+                                 MetaItemKind :: List ( ..)  => { } 
84+                                 MetaItemKind :: NameValue ( lit)  if  !lit. kind . is_str ( )  => { 
85+                                     error ! ( "argument value must be a string" ) ; 
86+                                 } 
87+                                 MetaItemKind :: NameValue ( ..)  | MetaItemKind :: Word  => { 
88+                                     let  ident = meta_item. ident ( ) . expect ( "multi-segment cfg key" ) ; 
89+                                     return  ( ident. name ,  meta_item. value_str ( ) ) ; 
90+                                 } 
8791                            } 
8892                        } 
93+                         Ok ( ..)  => { } 
94+                         Err ( err)  => err. cancel ( ) , 
8995                    } 
90-                     Ok ( ..)  => { } 
91-                     Err ( err)  => err. cancel ( ) , 
92-                 } , 
96+                 } 
9397                Err ( errs)  => errs. into_iter ( ) . for_each ( |err| err. cancel ( ) ) , 
94-             } 
98+             } ; 
9599
96100            // If the user tried to use a key="value" flag, but is missing the quotes, provide 
97101            // a hint about how to resolve this. 
@@ -177,6 +181,7 @@ pub(crate) fn parse_check_cfg(dcx: DiagCtxtHandle<'_>, specs: Vec<String>) -> Ch
177181                    expected_error ( ) ; 
178182                } 
179183            } ; 
184+         parser. parse_cfg_pred  = true ; 
180185
181186        let  meta_item = match  parser. parse_meta_item ( AllowLeadingUnsafe :: No )  { 
182187            Ok ( meta_item)  if  parser. token  == token:: Eof  => meta_item, 
0 commit comments