@@ -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