Repository: rust-lang/rust
File: compiler/rustc_feature/src/removed.rs (Rust)

Code before:
    /// Allows exhaustive integer pattern matching with `usize::MAX`/`isize::MIN`/`isize::MAX`.
    (removed, precise_pointer_size_matching, "1.76.0", Some(56354),
     Some("removed in favor of half-open ranges"), 118598),
    (removed, pref_align_of, "1.89.0", Some(91971),
     Some("removed due to marginal use and inducing compiler complications")),
    (removed, proc_macro_expr, "1.27.0", Some(54727),
     Some("subsumed by `#![feature(proc_macro_hygiene)]`"), 52121),
    (removed, proc_macro_gen, "1.27.0", Some(54727),
     Some("subsumed by `#![feature(proc_macro_hygiene)]`"), 52121),
    (removed, proc_macro_mod, "1.27.0", Some(54727),
     Some("subsumed by `#![feature(proc_macro_hygiene)]`"), 52121),
    (removed, proc_macro_non_items, "1.27.0", Some(54727),
     Some("subsumed by `#![feature(proc_macro_hygiene)]`"), 52121),
    (removed, pub_macro_rules, "1.53.0", Some(78855),
     Some("removed due to being incomplete, in particular it does not work across crates")),
    (removed, pushpop_unsafe, "1.2.0", None, None),
    (removed, quad_precision_float, "1.0.0", None, None),
    (removed, quote, "1.33.0", Some(29601), None),
    (removed, ref_pat_everywhere, "1.80.0", Some(123076), Some("superseded by `ref_pat_eat_one_layer_2024"), 125168),
    (removed, reflect, "1.0.0", Some(27749), None),
    /// Allows using the `#[register_attr]` attribute.
    (removed, register_attr, "1.65.0", Some(66080),
     Some("removed in favor of `#![register_tool]`"), 66070),
    (removed, rust_2018_preview, "1.76.0", None,
     Some("2018 Edition preview is no longer relevant")),
    (removed, rustc_allow_const_fn_unstable, "CURRENT_RUSTC_VERSION", Some(69399), Some("merged into `#![feature(rustc_attrs)]`")),
    /// Allows using the macros:
    /// + `__diagnostic_used`
    /// + `__register_diagnostic`
    /// +`__build_diagnostic_array`
    (removed, rustc_diagnostic_macros, "1.38.0", None, None, 64139),
    /// Allows identifying crates that contain sanitizer runtimes.
    (removed, sanitizer_runtime, "1.17.0", None, None, 65241),
    (removed, simd, "1.0.0", Some(27731), Some("removed in favor of `#[repr(simd)]`")),
    /// Allows using `#[start]` on a function indicating that it is the program entrypoint.
    (removed, start, "1.86.0", Some(29633), Some("not portable enough and never RFC'd"), 134299),
    /// Allows `#[link(kind = "static-nobundle", ...)]`.
    (removed, static_nobundle, "1.63.0", Some(37403),
     Some(r#"subsumed by `#[link(kind = "static", modifiers = "-bundle", ...)]`"#), 95818),
    /// Allows string patterns to dereference values to match them.
    (removed, string_deref_patterns, "1.94.0", Some(87121), Some("superseded by `deref_patterns`"), 150530),
    (removed, struct_inherit, "1.0.0", None, None),
    (removed, test_removed_feature, "1.0.0", None, None),
    /// Allows using items which are missing stability attributes
    (removed, unmarked_api, "1.0.0", None, None),
    /// Allows unnamed fields of struct and union type
    (removed, unnamed_fields, "1.83.0", Some(49804), Some("feature needs redesign"), 131045),
    (removed, unsafe_no_drop_flag, "1.0.0", None, None),
    /// Allows unsized rvalues at arguments and parameters.
    (removed, unsized_locals, "1.89.0", Some(48055), Some("removed due to implementation concerns; see https://github.com/rust-lang/rust/issues/111942")),
    (removed, unsized_tuple_coercion, "1.87.0", Some(42877),

Review comment (security):
I wonder if there's actual merit in keeping track of removed internal features 🤔. After all, in theory nobody other than stdlib authors should've used and should use this attribute. Context: I'm always eager to get rid of unnecessary baggage.

(#69399 isn't even a proper tracking issue ^^).

Code after:
    /// Allows exhaustive integer pattern matching with `usize::MAX`/`isize::MIN`/`isize::MAX`.
    (removed, precise_pointer_size_matching, "1.76.0", Some(56354),
     Some("removed in favor of half-open ranges"), 118598),
    (removed, pref_align_of, "1.89.0", Some(91971),
     Some("removed due to marginal use and inducing compiler complications")),
    (removed, proc_macro_expr, "1.27.0", Some(54727),
     Some("subsumed by `#![feature(proc_macro_hygiene)]`"), 52121),
    (removed, proc_macro_gen, "1.27.0", Some(54727),
     Some("subsumed by `#![feature(proc_macro_hygiene)]`"), 52121),
    (removed, proc_macro_mod, "1.27.0", Some(54727),
     Some("subsumed by `#![feature(proc_macro_hygiene)]`"), 52121),
    (removed, proc_macro_non_items, "1.27.0", Some(54727),
     Some("subsumed by `#![feature(proc_macro_hygiene)]`"), 52121),
    (removed, pub_macro_rules, "1.53.0", Some(78855),
     Some("removed due to being incomplete, in particular it does not work across crates")),
    (removed, pushpop_unsafe, "1.2.0", None, None),
    (removed, quad_precision_float, "1.0.0", None, None),
    (removed, quote, "1.33.0", Some(29601), None),
    (removed, ref_pat_everywhere, "1.80.0", Some(123076), Some("superseded by `ref_pat_eat_one_layer_2024"), 125168),
    (removed, reflect, "1.0.0", Some(27749), None),
    /// Allows using the `#[register_attr]` attribute.
    (removed, register_attr, "1.65.0", Some(66080),
     Some("removed in favor of `#![register_tool]`"), 66070),
    (removed, rust_2018_preview, "1.76.0", None,
     Some("2018 Edition preview is no longer relevant")),
    /// Allows using the macros:
    /// + `__diagnostic_used`
    /// + `__register_diagnostic`
    /// +`__build_diagnostic_array`
    (removed, rustc_diagnostic_macros, "1.38.0", None, None, 64139),
    /// Allows identifying crates that contain sanitizer runtimes.
    (removed, sanitizer_runtime, "1.17.0", None, None, 65241),
    (removed, simd, "1.0.0", Some(27731), Some("removed in favor of `#[repr(simd)]`")),
    /// Allows using `#[start]` on a function indicating that it is the program entrypoint.
    (removed, start, "1.86.0", Some(29633), Some("not portable enough and never RFC'd"), 134299),
    /// Allows `#[link(kind = "static-nobundle", ...)]`.
    (removed, static_nobundle, "1.63.0", Some(37403),
     Some(r#"subsumed by `#[link(kind = "static", modifiers = "-bundle", ...)]`"#), 95818),
    /// Allows string patterns to dereference values to match them.
    (removed, string_deref_patterns, "1.94.0", Some(87121), Some("superseded by `deref_patterns`"), 150530),
    (removed, struct_inherit, "1.0.0", None, None),
    (removed, test_removed_feature, "1.0.0", None, None),
    /// Allows using items which are missing stability attributes
    (removed, unmarked_api, "1.0.0", None, None),
    /// Allows unnamed fields of struct and union type
    (removed, unnamed_fields, "1.83.0", Some(49804), Some("feature needs redesign"), 131045),
    (removed, unsafe_no_drop_flag, "1.0.0", None, None),
    /// Allows unsized rvalues at arguments and parameters.
    (removed, unsized_locals, "1.89.0", Some(48055), Some("removed due to implementation concerns; see https://github.com/rust-lang/rust/issues/111942")),
    (removed, unsized_tuple_coercion, "1.87.0", Some(42877),
     Some("The feature restricts possible layouts for tuples, and this restriction is not worth it."), 137728),