Handle gracefully true/false in cfg(target(..)) compact

This commit is contained in:
Urgau 2024-10-16 09:41:49 +02:00
parent f6648f252a
commit 5eb8636989
3 changed files with 18 additions and 2 deletions

View File

@ -723,7 +723,13 @@ pub fn eval_condition(
}
mis.iter().fold(true, |res, mi| {
let mut mi = mi.meta_item().unwrap().clone();
let Some(mut mi) = mi.meta_item().cloned() else {
dcx.emit_err(session_diagnostics::CfgPredicateIdentifier {
span: mi.span(),
});
return false;
};
if let [seg, ..] = &mut mi.path.segments[..] {
seg.ident.name = Symbol::intern(&format!("target_{}", seg.ident.name));
}

View File

@ -14,4 +14,8 @@ fn two() {}
//~^ ERROR invalid predicate `target_pointer`
fn three() {}
#[cfg(target(true))]
//~^ ERROR `cfg` predicate key must be an identifier
fn four() {}
fn main() {}

View File

@ -16,7 +16,13 @@ error[E0537]: invalid predicate `target_pointer`
LL | #[cfg(target(os = "linux", pointer(width = "64")))]
| ^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 3 previous errors
error: `cfg` predicate key must be an identifier
--> $DIR/cfg-target-compact-errors.rs:17:14
|
LL | #[cfg(target(true))]
| ^^^^
error: aborting due to 4 previous errors
Some errors have detailed explanations: E0537, E0565.
For more information about an error, try `rustc --explain E0537`.