diff options
| author | Urgau <urgau@numericable.fr> | 2024-09-19 11:19:35 +0200 |
|---|---|---|
| committer | Urgau <urgau@numericable.fr> | 2024-10-04 09:09:20 +0200 |
| commit | 62ef411631efb25134e29da76fcdb7802aa94bd4 (patch) | |
| tree | 52298c664f291f37a910d8a0c2e10b1e062314f5 /compiler/rustc_attr/src/builtin.rs | |
| parent | c99f29b29fa4115436c352a921f9963b173b5608 (diff) | |
| download | rust-62ef411631efb25134e29da76fcdb7802aa94bd4.tar.gz rust-62ef411631efb25134e29da76fcdb7802aa94bd4.zip | |
Feature gate boolean lit support in cfg predicates
Diffstat (limited to 'compiler/rustc_attr/src/builtin.rs')
| -rw-r--r-- | compiler/rustc_attr/src/builtin.rs | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/compiler/rustc_attr/src/builtin.rs b/compiler/rustc_attr/src/builtin.rs index 930fdeb975d..a3c6132d484 100644 --- a/compiler/rustc_attr/src/builtin.rs +++ b/compiler/rustc_attr/src/builtin.rs @@ -18,7 +18,7 @@ use rustc_session::parse::feature_err; use rustc_session::{RustcVersion, Session}; use rustc_span::Span; use rustc_span::hygiene::Transparency; -use rustc_span::symbol::{Symbol, sym}; +use rustc_span::symbol::{Symbol, kw, sym}; use crate::fluent_generated; use crate::session_diagnostics::{self, IncorrectReprFormatGenericCause}; @@ -603,7 +603,23 @@ pub fn eval_condition( let cfg = match cfg { ast::NestedMetaItem::MetaItem(meta_item) => meta_item, - ast::NestedMetaItem::Lit(MetaItemLit { kind: LitKind::Bool(b), .. }) => return *b, + ast::NestedMetaItem::Lit(MetaItemLit { kind: LitKind::Bool(b), .. }) => { + if let Some(features) = features { + // we can't use `try_gate_cfg` as symbols don't differentiate between `r#true` + // and `true`, and we want to keep the former working without feature gate + gate_cfg( + &(( + if *b { kw::True } else { kw::False }, + sym::cfg_boolean_literals, + |features: &Features| features.cfg_boolean_literals, + )), + cfg.span(), + sess, + features, + ); + } + return *b; + } _ => { dcx.emit_err(session_diagnostics::UnsupportedLiteral { span: cfg.span(), |
