https://gcc.gnu.org/g:3afe5607d621902c8aa0f4fe6ab081af838ada1b
commit r17-5441-g3afe5607d621902c8aa0f4fe6ab081af838ada1b Author: Owen Avery <[email protected]> Date: Sat Oct 3 16:49:27 2026 -0400 gccrs: Remove extended_key_value_attributes Although this feature is active in rustc 1.50-1.53, our handling of its feature gate is prone to false positives. Since a target version bump directly to 1.54 or beyond (where this feature is accepted) would involve removing our handling of this feature anyways, it makes sense to do it now to simplify version bumping. Incidentally removes all parse-time feature gating usage, but the infrastructure (see Parser::collect_potential_gating_error) is left for future use. gcc/rust/ChangeLog: * checks/errors/feature/rust-feature-collector.cc (FeatureCollector::collect (Crate)): Do not automatically enable extended_key_value_attributes when targetting rustc versions before 1.50. * checks/errors/feature/rust-feature-defs-rfl.h (EXTENDED_KEY_VALUE_ATTRIBUTES): Remove feature definition. * parse/rust-parse-impl-attribute.hxx (Parser::parse_attr_input): Remove EXTENDED_KEY_VALUE_ATTRIBUTES feature gate. gcc/testsuite/ChangeLog: * rust/compile/doc_macro.rs: Remove explicit enabling of extended_key_value_attributes feature. * rust/compile/issues/3661.rs: Likewise. * rust/compile/early_feature_gate_in_macro.rs: Removed. * rust/compile/parse_time_feature_gate.rs: Removed. Signed-off-by: Owen Avery <[email protected]> Diff: --- .../errors/feature/rust-feature-collector.cc | 5 ---- .../checks/errors/feature/rust-feature-defs-rfl.h | 2 -- gcc/rust/parse/rust-parse-impl-attribute.hxx | 10 -------- gcc/testsuite/rust/compile/doc_macro.rs | 1 - .../rust/compile/early_feature_gate_in_macro.rs | 29 ---------------------- gcc/testsuite/rust/compile/issues/3661.rs | 1 - .../rust/compile/parse_time_feature_gate.rs | 18 -------------- 7 files changed, 66 deletions(-) diff --git a/gcc/rust/checks/errors/feature/rust-feature-collector.cc b/gcc/rust/checks/errors/feature/rust-feature-collector.cc index bd5a910d96c6..ebef3e30768e 100644 --- a/gcc/rust/checks/errors/feature/rust-feature-collector.cc +++ b/gcc/rust/checks/errors/feature/rust-feature-collector.cc @@ -33,11 +33,6 @@ FeatureCollector::collect (AST::Crate &crate) features.valid_lib_features.clear (); features.crate_id = crate.get_node_id (); - // TODO: this is a hack, remove when possible - if (Session::get_instance ().get_compat_version () < 50) - features.valid_lang_features.insert ( - Feature::Name::EXTENDED_KEY_VALUE_ATTRIBUTES); - visit (crate); return features; diff --git a/gcc/rust/checks/errors/feature/rust-feature-defs-rfl.h b/gcc/rust/checks/errors/feature/rust-feature-defs-rfl.h index 03f54dff6a43..587461961fff 100644 --- a/gcc/rust/checks/errors/feature/rust-feature-defs-rfl.h +++ b/gcc/rust/checks/errors/feature/rust-feature-defs-rfl.h @@ -22,8 +22,6 @@ * available in the version targeted by the compiler. */ -FEATURE_ACTIVE ("extended_key_value_attributes", EXTENDED_KEY_VALUE_ATTRIBUTES, - "1.50.0", ISSUE_SOME (78835), EDITION_NONE) FEATURE_ACTIVE ("cfi_encoding", CFI_ENCODING, "1.71.0", ISSUE_SOME (89653), EDITION_NONE) // FIXME: We need to enable this when the compatibility mode is >= 1.60 I guess? diff --git a/gcc/rust/parse/rust-parse-impl-attribute.hxx b/gcc/rust/parse/rust-parse-impl-attribute.hxx index d473c9e2b9b0..03ff4ea02f02 100644 --- a/gcc/rust/parse/rust-parse-impl-attribute.hxx +++ b/gcc/rust/parse/rust-parse-impl-attribute.hxx @@ -293,16 +293,6 @@ Parser<ManagedTokenSource>::parse_attr_input () t = lexer.peek_token (); - /* Ensure token is a "literal expression" (literally only a literal - * token of any type) */ - if (!t->is_literal ()) - { - Error error ( - t->get_locus (), - "arbitrary expressions in key-value attributes are unstable"); - collect_potential_gating_error ( - Feature::Name::EXTENDED_KEY_VALUE_ATTRIBUTES, std::move (error)); - } // attempt to parse macro // TODO: macros may/may not be allowed in attributes // this is needed for "#[doc = include_str!(...)]" diff --git a/gcc/testsuite/rust/compile/doc_macro.rs b/gcc/testsuite/rust/compile/doc_macro.rs index e2c84a7e1e0e..0d74344f963a 100644 --- a/gcc/testsuite/rust/compile/doc_macro.rs +++ b/gcc/testsuite/rust/compile/doc_macro.rs @@ -1,7 +1,6 @@ #![feature(rustc_attrs)] #![feature(no_core)] #![no_core] -#![feature(extended_key_value_attributes)] #![doc = concat!("AB")] // This macro export should not be required for rust 1.49 because inner diff --git a/gcc/testsuite/rust/compile/early_feature_gate_in_macro.rs b/gcc/testsuite/rust/compile/early_feature_gate_in_macro.rs deleted file mode 100644 index dd68b920e710..000000000000 --- a/gcc/testsuite/rust/compile/early_feature_gate_in_macro.rs +++ /dev/null @@ -1,29 +0,0 @@ -// { dg-additional-options "-frust-compat-version=1.50" } -#![feature(rustc_attrs)] -#![feature(lang_items)] -#![feature(no_core)] -#![no_core] - -#[rustc_builtin_macro] -macro_rules! concat { - () => {{}}; -} - -#[rustc_builtin_macro] -macro_rules! stringify { - () => {{}}; -} - -macro_rules! prefix_symbol( - ($prefix : tt, { $($ident: ident, )* }) => { - $( - // { dg-error "arbitrary expressions in key-value attributes are unstable" "" { target *-*-* } .+1 } - #[export_name = concat!(stringify!($prefix), stringify!($ident))] - pub extern "C" fn $ident() { - } - )* -}); - -prefix_symbol!(a,{ - __func0, -}); diff --git a/gcc/testsuite/rust/compile/issues/3661.rs b/gcc/testsuite/rust/compile/issues/3661.rs index 0c8eab3f2eb9..253448274f0c 100644 --- a/gcc/testsuite/rust/compile/issues/3661.rs +++ b/gcc/testsuite/rust/compile/issues/3661.rs @@ -1,6 +1,5 @@ #![feature(no_core)] #![no_core] -#![feature(extended_key_value_attributes)] #![feature(rustc_attrs)] #[rustc_builtin_macro] diff --git a/gcc/testsuite/rust/compile/parse_time_feature_gate.rs b/gcc/testsuite/rust/compile/parse_time_feature_gate.rs deleted file mode 100644 index 1affcd81a5a3..000000000000 --- a/gcc/testsuite/rust/compile/parse_time_feature_gate.rs +++ /dev/null @@ -1,18 +0,0 @@ -// { dg-additional-options "-frust-compat-version=1.50" } -#![feature(no_core)] -#![no_core] -#![feature(rustc_attrs)] - -#[rustc_builtin_macro] -macro_rules! concat { - () => {{}}; -} - -#[rustc_builtin_macro] -macro_rules! stringify { - () => {{}}; -} - -// { dg-error "arbitrary expressions in key-value attributes are unstable" "" { target *-*-* } .+1 } -#[export_name = concat!(stringify!(non), stringify!(literal))] -pub extern "C" fn attribute_test_function() {}
