Skip to content

Commit e0e1e35

Browse files
authored
Rollup merge of #131771 - Urgau:cfg-target-131759, r=jieyouxu
Handle gracefully true/false in `cfg(target(..))` compact This PR handles gracefully `true`/`false` in `cfg(target(..))` compact instead of ICE. r? `@nnethercote` Fixes #131759
2 parents ea063a2 + 5eb8636 commit e0e1e35

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

compiler/rustc_attr/src/builtin.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -723,7 +723,13 @@ pub fn eval_condition(
723723
}
724724

725725
mis.iter().fold(true, |res, mi| {
726-
let mut mi = mi.meta_item().unwrap().clone();
726+
let Some(mut mi) = mi.meta_item().cloned() else {
727+
dcx.emit_err(session_diagnostics::CfgPredicateIdentifier {
728+
span: mi.span(),
729+
});
730+
return false;
731+
};
732+
727733
if let [seg, ..] = &mut mi.path.segments[..] {
728734
seg.ident.name = Symbol::intern(&format!("target_{}", seg.ident.name));
729735
}

tests/ui/cfg/cfg-target-compact-errors.rs

+4
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,8 @@ fn two() {}
1414
//~^ ERROR invalid predicate `target_pointer`
1515
fn three() {}
1616

17+
#[cfg(target(true))]
18+
//~^ ERROR `cfg` predicate key must be an identifier
19+
fn four() {}
20+
1721
fn main() {}

tests/ui/cfg/cfg-target-compact-errors.stderr

+7-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ error[E0537]: invalid predicate `target_pointer`
1616
LL | #[cfg(target(os = "linux", pointer(width = "64")))]
1717
| ^^^^^^^^^^^^^^^^^^^^^
1818

19-
error: aborting due to 3 previous errors
19+
error: `cfg` predicate key must be an identifier
20+
--> $DIR/cfg-target-compact-errors.rs:17:14
21+
|
22+
LL | #[cfg(target(true))]
23+
| ^^^^
24+
25+
error: aborting due to 4 previous errors
2026

2127
Some errors have detailed explanations: E0537, E0565.
2228
For more information about an error, try `rustc --explain E0537`.

0 commit comments

Comments
 (0)