diff --git a/src/libsyntax/attr/builtin.rs b/src/libsyntax/attr/builtin.rs index d0a31b330ab39..7886824cd32cf 100644 --- a/src/libsyntax/attr/builtin.rs +++ b/src/libsyntax/attr/builtin.rs @@ -535,6 +535,10 @@ pub fn find_crate_name(attrs: &[Attribute]) -> Option { super::first_attr_value_str_by_name(attrs, sym::crate_name) } +pub fn is_accessible(_sess: &ParseSess, _path: &ast::Path) -> bool { + true +} + /// Tests if a cfg-pattern matches the cfg set pub fn cfg_matches(cfg: &ast::MetaItem, sess: &ParseSess, features: Option<&Features>) -> bool { eval_condition(cfg, sess, &mut |cfg| { @@ -546,6 +550,15 @@ pub fn cfg_matches(cfg: &ast::MetaItem, sess: &ParseSess, features: Option<&Feat return error(cfg.path.span, "`cfg` predicate key must be an identifier"); } match &cfg.kind { + MetaItemKind::List(ref mis) if cfg.name_or_empty() == sym::accessible => { + if mis.len() != 1 { + span_err!(sess.span_diagnostic, cfg.span, E0536, "expected 1 cfg-pattern"); + return false; + } + dbg!(&cfg); + dbg!(&cfg.path); + unreachable!(); + } MetaItemKind::List(..) => { error(cfg.span, "unexpected parentheses after `cfg` predicate key") } diff --git a/src/libsyntax/feature_gate/active.rs b/src/libsyntax/feature_gate/active.rs index d59d0f0e28e9b..46d53378cfd2a 100644 --- a/src/libsyntax/feature_gate/active.rs +++ b/src/libsyntax/feature_gate/active.rs @@ -529,6 +529,9 @@ declare_features! ( /// Allows using the `#[register_attr]` attribute. (active, register_tool, "1.41.0", Some(66079), None), + /// Allows the use of `#[cfg(accessible(..))]`. + (active, cfg_accessible, "1.41.0", Some(64797), None), + // ------------------------------------------------------------------------- // feature-group-end: actual feature gates // ------------------------------------------------------------------------- diff --git a/src/libsyntax/feature_gate/builtin_attrs.rs b/src/libsyntax/feature_gate/builtin_attrs.rs index 608cc2a09cbee..74adcdfaf8ab5 100644 --- a/src/libsyntax/feature_gate/builtin_attrs.rs +++ b/src/libsyntax/feature_gate/builtin_attrs.rs @@ -27,6 +27,7 @@ macro_rules! cfg_fn { /// `cfg(...)`'s that are feature gated. const GATED_CFGS: &[(Symbol, Symbol, GateFn)] = &[ // (name in cfg, feature, function to check if the feature is enabled) + (sym::accessible, sym::cfg_accessible, cfg_fn!(cfg_accessible)), (sym::target_thread_local, sym::cfg_target_thread_local, cfg_fn!(cfg_target_thread_local)), (sym::target_has_atomic, sym::cfg_target_has_atomic, cfg_fn!(cfg_target_has_atomic)), (sym::target_has_atomic_load_store, sym::cfg_target_has_atomic, cfg_fn!(cfg_target_has_atomic)), diff --git a/src/libsyntax_pos/symbol.rs b/src/libsyntax_pos/symbol.rs index c41f413970ff5..9cb50c2f37eeb 100644 --- a/src/libsyntax_pos/symbol.rs +++ b/src/libsyntax_pos/symbol.rs @@ -119,6 +119,7 @@ symbols! { abi_vectorcall, abi_x86_interrupt, aborts, + accessible, advanced_slice_patterns, adx_target_feature, alias, @@ -172,6 +173,7 @@ symbols! { C, cdylib, cfg, + cfg_accessible, cfg_attr, cfg_attr_multi, cfg_doctest, diff --git a/src/test/ui/feature-gates/feature-gate-cfg_accessible.rs b/src/test/ui/feature-gates/feature-gate-cfg_accessible.rs new file mode 100644 index 0000000000000..1a1fc71f21b2f --- /dev/null +++ b/src/test/ui/feature-gates/feature-gate-cfg_accessible.rs @@ -0,0 +1,2 @@ +#[cfg(accessible(::std::mem::ManuallyDrop))] //~^ ERROR: currently unstable +fn main() {}