mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 06:51:58 +00:00
Rollup merge of #118802 - ehuss:remove-edition-preview, r=TaKO8Ki
Remove edition umbrella features. In the 2018 edition, there was an "umbrella" feature `#[feature(rust_2018_preview)]` which was used to enable several other features at once. This umbrella mechanism was not used in the 2021 edition and likely will not be used in 2024 either. During 2018 users reported that setting the feature was awkward, especially since they already needed to opt-in via the edition mechanism. This PR removes this mechanism because I believe it will not be used (and will clean up and simplify the code). I believe that there are better ways to handle features and editions. In short: - For highly experimental features, that may or may not be involved in an edition, they can implement regular feature gates like `tcx.features().my_feature`. - For experimental features that *might* be involved in an edition, they should implement gates with `tcx.features().my_feature && span.at_least_rust_20xx()`. This requires the user to still specify `#![feature(my_feature)]`, to avoid disrupting testing of other edition features which are ready and have been accepted within the edition. - For experimental features that have graduated to definitely be part of an edition, they should implement gates with `tcx.features().my_feature || span.at_least_rust_20xx()`, or just remove the feature check altogether and just check `span.at_least_rust_20xx()`. - For relatively simple changes, they can skip the whole feature gating thing and just check `span.at_least_rust_20xx()`, and rely on the instability of the edition itself (which requires `-Zunstable-options`) to gate it. I am working on documenting all of this in the rustc-dev-guide.
This commit is contained in:
commit
54d6bded30
@ -1,9 +1,11 @@
|
||||
#### Note: this error code is no longer emitted by the compiler.
|
||||
|
||||
A `#![feature]` attribute was declared for a feature that is stable in the
|
||||
current edition, but not in all editions.
|
||||
|
||||
Erroneous code example:
|
||||
|
||||
```rust2018,compile_fail,E0705
|
||||
```compile_fail
|
||||
#![feature(rust_2018_preview)]
|
||||
#![feature(test_2018_feature)] // error: the feature
|
||||
// `test_2018_feature` is
|
||||
|
@ -35,9 +35,6 @@ expand_explain_doc_comment_outer =
|
||||
expand_expr_repeat_no_syntax_vars =
|
||||
attempted to repeat an expression containing no syntax variables matched as repeating at this depth
|
||||
|
||||
expand_feature_included_in_edition =
|
||||
the feature `{$feature}` is included in the Rust {$edition} edition
|
||||
|
||||
expand_feature_not_allowed =
|
||||
the feature `{$name}` is not in the list of allowed features
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
//! Conditional compilation stripping.
|
||||
|
||||
use crate::errors::{
|
||||
FeatureIncludedInEdition, FeatureNotAllowed, FeatureRemoved, FeatureRemovedReason, InvalidCfg,
|
||||
MalformedFeatureAttribute, MalformedFeatureAttributeHelp, RemoveExprNotSupported,
|
||||
FeatureNotAllowed, FeatureRemoved, FeatureRemovedReason, InvalidCfg, MalformedFeatureAttribute,
|
||||
MalformedFeatureAttributeHelp, RemoveExprNotSupported,
|
||||
};
|
||||
use rustc_ast::ptr::P;
|
||||
use rustc_ast::token::{Delimiter, Token, TokenKind};
|
||||
@ -12,13 +12,11 @@ use rustc_ast::NodeId;
|
||||
use rustc_ast::{self as ast, AttrStyle, Attribute, HasAttrs, HasTokens, MetaItem};
|
||||
use rustc_attr as attr;
|
||||
use rustc_data_structures::flat_map_in_place::FlatMapInPlace;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_feature::Features;
|
||||
use rustc_feature::{ACCEPTED_FEATURES, REMOVED_FEATURES, UNSTABLE_FEATURES};
|
||||
use rustc_parse::validate_attr;
|
||||
use rustc_session::parse::feature_err;
|
||||
use rustc_session::Session;
|
||||
use rustc_span::edition::ALL_EDITIONS;
|
||||
use rustc_span::symbol::{sym, Symbol};
|
||||
use rustc_span::Span;
|
||||
use thin_vec::ThinVec;
|
||||
@ -47,42 +45,6 @@ pub fn features(sess: &Session, krate_attrs: &[Attribute], crate_name: Symbol) -
|
||||
|
||||
let mut features = Features::default();
|
||||
|
||||
// The edition from `--edition`.
|
||||
let crate_edition = sess.edition();
|
||||
|
||||
// The maximum of (a) the edition from `--edition` and (b) any edition
|
||||
// umbrella feature-gates declared in the code.
|
||||
// - E.g. if `crate_edition` is 2015 but `rust_2018_preview` is present,
|
||||
// `feature_edition` is 2018
|
||||
let mut features_edition = crate_edition;
|
||||
for attr in krate_attrs {
|
||||
for mi in feature_list(attr) {
|
||||
if mi.is_word() {
|
||||
let name = mi.name_or_empty();
|
||||
let edition = ALL_EDITIONS.iter().find(|e| name == e.feature_name()).copied();
|
||||
if let Some(edition) = edition
|
||||
&& edition > features_edition
|
||||
{
|
||||
features_edition = edition;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Enable edition-dependent features based on `features_edition`.
|
||||
// - E.g. enable `test_2018_feature` if `features_edition` is 2018 or higher
|
||||
let mut edition_enabled_features = FxHashSet::default();
|
||||
for f in UNSTABLE_FEATURES {
|
||||
if let Some(edition) = f.feature.edition
|
||||
&& edition <= features_edition
|
||||
{
|
||||
// FIXME(Manishearth) there is currently no way to set lib features by
|
||||
// edition.
|
||||
edition_enabled_features.insert(f.feature.name);
|
||||
(f.set_enabled)(&mut features);
|
||||
}
|
||||
}
|
||||
|
||||
// Process all features declared in the code.
|
||||
for attr in krate_attrs {
|
||||
for mi in feature_list(attr) {
|
||||
@ -107,38 +69,6 @@ pub fn features(sess: &Session, krate_attrs: &[Attribute], crate_name: Symbol) -
|
||||
}
|
||||
};
|
||||
|
||||
// If the declared feature is an edition umbrella feature-gate,
|
||||
// warn if it was redundant w.r.t. `crate_edition`.
|
||||
// - E.g. warn if `rust_2018_preview` is declared when
|
||||
// `crate_edition` is 2018
|
||||
// - E.g. don't warn if `rust_2018_preview` is declared when
|
||||
// `crate_edition` is 2015.
|
||||
if let Some(&edition) = ALL_EDITIONS.iter().find(|e| name == e.feature_name()) {
|
||||
if edition <= crate_edition {
|
||||
sess.emit_warning(FeatureIncludedInEdition {
|
||||
span: mi.span(),
|
||||
feature: name,
|
||||
edition,
|
||||
});
|
||||
}
|
||||
features.set_declared_lang_feature(name, mi.span(), None);
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the declared feature is edition-dependent and was already
|
||||
// enabled due to `feature_edition`, give a warning.
|
||||
// - E.g. warn if `test_2018_feature` is declared when
|
||||
// `feature_edition` is 2018 or higher.
|
||||
if edition_enabled_features.contains(&name) {
|
||||
sess.emit_warning(FeatureIncludedInEdition {
|
||||
span: mi.span(),
|
||||
feature: name,
|
||||
edition: features_edition,
|
||||
});
|
||||
features.set_declared_lang_feature(name, mi.span(), None);
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the declared feature has been removed, issue an error.
|
||||
if let Some(f) = REMOVED_FEATURES.iter().find(|f| name == f.feature.name) {
|
||||
sess.emit_err(FeatureRemoved {
|
||||
|
@ -1,7 +1,6 @@
|
||||
use rustc_ast::ast;
|
||||
use rustc_macros::Diagnostic;
|
||||
use rustc_session::Limit;
|
||||
use rustc_span::edition::Edition;
|
||||
use rustc_span::symbol::{Ident, MacroRulesNormalizedIdent};
|
||||
use rustc_span::{Span, Symbol};
|
||||
use std::borrow::Cow;
|
||||
@ -168,15 +167,6 @@ pub(crate) struct TakesNoArguments<'a> {
|
||||
pub name: &'a str,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(expand_feature_included_in_edition, code = "E0705")]
|
||||
pub(crate) struct FeatureIncludedInEdition {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
pub feature: Symbol,
|
||||
pub edition: Edition,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(expand_feature_removed, code = "E0557")]
|
||||
pub(crate) struct FeatureRemoved<'a> {
|
||||
|
@ -5,7 +5,7 @@ use rustc_span::symbol::sym;
|
||||
|
||||
macro_rules! declare_features {
|
||||
($(
|
||||
$(#[doc = $doc:tt])* (accepted, $feature:ident, $ver:expr, $issue:expr, None),
|
||||
$(#[doc = $doc:tt])* (accepted, $feature:ident, $ver:expr, $issue:expr),
|
||||
)+) => {
|
||||
/// Formerly unstable features that have now been accepted (stabilized).
|
||||
pub const ACCEPTED_FEATURES: &[Feature] = &[
|
||||
@ -13,7 +13,6 @@ macro_rules! declare_features {
|
||||
name: sym::$feature,
|
||||
since: $ver,
|
||||
issue: to_nonzero($issue),
|
||||
edition: None,
|
||||
}),+
|
||||
];
|
||||
}
|
||||
@ -27,10 +26,10 @@ declare_features! (
|
||||
|
||||
/// A temporary feature gate used to enable parser extensions needed
|
||||
/// to bootstrap fix for #5723.
|
||||
(accepted, issue_5723_bootstrap, "1.0.0", None, None),
|
||||
(accepted, issue_5723_bootstrap, "1.0.0", None),
|
||||
/// These are used to test this portion of the compiler,
|
||||
/// they don't actually mean anything.
|
||||
(accepted, test_accepted_feature, "1.0.0", None, None),
|
||||
(accepted, test_accepted_feature, "1.0.0", None),
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
// Features are listed in alphabetical order. Tidy will fail if you don't keep it this way.
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
@ -44,338 +43,338 @@ declare_features! (
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
/// Allows `#[target_feature(...)]` on aarch64 platforms
|
||||
(accepted, aarch64_target_feature, "1.61.0", Some(44839), None),
|
||||
(accepted, aarch64_target_feature, "1.61.0", Some(44839)),
|
||||
/// Allows using the `efiapi` ABI.
|
||||
(accepted, abi_efiapi, "1.68.0", Some(65815), None),
|
||||
(accepted, abi_efiapi, "1.68.0", Some(65815)),
|
||||
/// Allows the sysV64 ABI to be specified on all platforms
|
||||
/// instead of just the platforms on which it is the C ABI.
|
||||
(accepted, abi_sysv64, "1.24.0", Some(36167), None),
|
||||
(accepted, abi_sysv64, "1.24.0", Some(36167)),
|
||||
/// Allows using the `thiscall` ABI.
|
||||
(accepted, abi_thiscall, "1.73.0", None, None),
|
||||
(accepted, abi_thiscall, "1.73.0", None),
|
||||
/// Allows using ADX intrinsics from `core::arch::{x86, x86_64}`.
|
||||
(accepted, adx_target_feature, "1.61.0", Some(44839), None),
|
||||
(accepted, adx_target_feature, "1.61.0", Some(44839)),
|
||||
/// Allows explicit discriminants on non-unit enum variants.
|
||||
(accepted, arbitrary_enum_discriminant, "1.66.0", Some(60553), None),
|
||||
(accepted, arbitrary_enum_discriminant, "1.66.0", Some(60553)),
|
||||
/// Allows using `sym` operands in inline assembly.
|
||||
(accepted, asm_sym, "1.66.0", Some(93333), None),
|
||||
(accepted, asm_sym, "1.66.0", Some(93333)),
|
||||
/// Allows the definition of associated constants in `trait` or `impl` blocks.
|
||||
(accepted, associated_consts, "1.20.0", Some(29646), None),
|
||||
(accepted, associated_consts, "1.20.0", Some(29646)),
|
||||
/// Allows using associated `type`s in `trait`s.
|
||||
(accepted, associated_types, "1.0.0", None, None),
|
||||
(accepted, associated_types, "1.0.0", None),
|
||||
/// Allows free and inherent `async fn`s, `async` blocks, and `<expr>.await` expressions.
|
||||
(accepted, async_await, "1.39.0", Some(50547), None),
|
||||
(accepted, async_await, "1.39.0", Some(50547)),
|
||||
/// Allows async functions to be declared, implemented, and used in traits.
|
||||
(accepted, async_fn_in_trait, "1.75.0", Some(91611), None),
|
||||
(accepted, async_fn_in_trait, "1.75.0", Some(91611)),
|
||||
/// Allows all literals in attribute lists and values of key-value pairs.
|
||||
(accepted, attr_literals, "1.30.0", Some(34981), None),
|
||||
(accepted, attr_literals, "1.30.0", Some(34981)),
|
||||
/// Allows overloading augmented assignment operations like `a += b`.
|
||||
(accepted, augmented_assignments, "1.8.0", Some(28235), None),
|
||||
(accepted, augmented_assignments, "1.8.0", Some(28235)),
|
||||
/// Allows mixing bind-by-move in patterns and references to those identifiers in guards.
|
||||
(accepted, bind_by_move_pattern_guards, "1.39.0", Some(15287), None),
|
||||
(accepted, bind_by_move_pattern_guards, "1.39.0", Some(15287)),
|
||||
/// Allows bindings in the subpattern of a binding pattern.
|
||||
/// For example, you can write `x @ Some(y)`.
|
||||
(accepted, bindings_after_at, "1.56.0", Some(65490), None),
|
||||
(accepted, bindings_after_at, "1.56.0", Some(65490)),
|
||||
/// Allows empty structs and enum variants with braces.
|
||||
(accepted, braced_empty_structs, "1.8.0", Some(29720), None),
|
||||
(accepted, braced_empty_structs, "1.8.0", Some(29720)),
|
||||
/// Allows `c"foo"` literals.
|
||||
(accepted, c_str_literals, "CURRENT_RUSTC_VERSION", Some(105723), None),
|
||||
(accepted, c_str_literals, "CURRENT_RUSTC_VERSION", Some(105723)),
|
||||
/// Allows `#[cfg_attr(predicate, multiple, attributes, here)]`.
|
||||
(accepted, cfg_attr_multi, "1.33.0", Some(54881), None),
|
||||
(accepted, cfg_attr_multi, "1.33.0", Some(54881)),
|
||||
/// Allows the use of `#[cfg(doctest)]`, set when rustdoc is collecting doctests.
|
||||
(accepted, cfg_doctest, "1.40.0", Some(62210), None),
|
||||
(accepted, cfg_doctest, "1.40.0", Some(62210)),
|
||||
/// Enables `#[cfg(panic = "...")]` config key.
|
||||
(accepted, cfg_panic, "1.60.0", Some(77443), None),
|
||||
(accepted, cfg_panic, "1.60.0", Some(77443)),
|
||||
/// Allows `cfg(target_feature = "...")`.
|
||||
(accepted, cfg_target_feature, "1.27.0", Some(29717), None),
|
||||
(accepted, cfg_target_feature, "1.27.0", Some(29717)),
|
||||
/// Allows `cfg(target_vendor = "...")`.
|
||||
(accepted, cfg_target_vendor, "1.33.0", Some(29718), None),
|
||||
(accepted, cfg_target_vendor, "1.33.0", Some(29718)),
|
||||
/// Allows implementing `Clone` for closures where possible (RFC 2132).
|
||||
(accepted, clone_closures, "1.26.0", Some(44490), None),
|
||||
(accepted, clone_closures, "1.26.0", Some(44490)),
|
||||
/// Allows coercing non capturing closures to function pointers.
|
||||
(accepted, closure_to_fn_coercion, "1.19.0", Some(39817), None),
|
||||
(accepted, closure_to_fn_coercion, "1.19.0", Some(39817)),
|
||||
/// Allows using the CMPXCHG16B target feature.
|
||||
(accepted, cmpxchg16b_target_feature, "1.69.0", Some(44839), None),
|
||||
(accepted, cmpxchg16b_target_feature, "1.69.0", Some(44839)),
|
||||
/// Allows usage of the `compile_error!` macro.
|
||||
(accepted, compile_error, "1.20.0", Some(40872), None),
|
||||
(accepted, compile_error, "1.20.0", Some(40872)),
|
||||
/// Allows `impl Trait` in function return types.
|
||||
(accepted, conservative_impl_trait, "1.26.0", Some(34511), None),
|
||||
(accepted, conservative_impl_trait, "1.26.0", Some(34511)),
|
||||
/// Allows calling constructor functions in `const fn`.
|
||||
(accepted, const_constructor, "1.40.0", Some(61456), None),
|
||||
(accepted, const_constructor, "1.40.0", Some(61456)),
|
||||
/// Allows using and casting function pointers in a `const fn`.
|
||||
(accepted, const_fn_fn_ptr_basics, "1.61.0", Some(57563), None),
|
||||
(accepted, const_fn_fn_ptr_basics, "1.61.0", Some(57563)),
|
||||
/// Allows trait bounds in `const fn`.
|
||||
(accepted, const_fn_trait_bound, "1.61.0", Some(93706), None),
|
||||
(accepted, const_fn_trait_bound, "1.61.0", Some(93706)),
|
||||
/// Allows calling `transmute` in const fn
|
||||
(accepted, const_fn_transmute, "1.56.0", Some(53605), None),
|
||||
(accepted, const_fn_transmute, "1.56.0", Some(53605)),
|
||||
/// Allows accessing fields of unions inside `const` functions.
|
||||
(accepted, const_fn_union, "1.56.0", Some(51909), None),
|
||||
(accepted, const_fn_union, "1.56.0", Some(51909)),
|
||||
/// Allows unsizing coercions in `const fn`.
|
||||
(accepted, const_fn_unsize, "1.54.0", Some(64992), None),
|
||||
(accepted, const_fn_unsize, "1.54.0", Some(64992)),
|
||||
/// Allows const generics to have default values (e.g. `struct Foo<const N: usize = 3>(...);`).
|
||||
(accepted, const_generics_defaults, "1.59.0", Some(44580), None),
|
||||
(accepted, const_generics_defaults, "1.59.0", Some(44580)),
|
||||
/// Allows the use of `if` and `match` in constants.
|
||||
(accepted, const_if_match, "1.46.0", Some(49146), None),
|
||||
(accepted, const_if_match, "1.46.0", Some(49146)),
|
||||
/// Allows argument and return position `impl Trait` in a `const fn`.
|
||||
(accepted, const_impl_trait, "1.61.0", Some(77463), None),
|
||||
(accepted, const_impl_trait, "1.61.0", Some(77463)),
|
||||
/// Allows indexing into constant arrays.
|
||||
(accepted, const_indexing, "1.26.0", Some(29947), None),
|
||||
(accepted, const_indexing, "1.26.0", Some(29947)),
|
||||
/// Allows let bindings, assignments and destructuring in `const` functions and constants.
|
||||
/// As long as control flow is not implemented in const eval, `&&` and `||` may not be used
|
||||
/// at the same time as let bindings.
|
||||
(accepted, const_let, "1.33.0", Some(48821), None),
|
||||
(accepted, const_let, "1.33.0", Some(48821)),
|
||||
/// Allows the use of `loop` and `while` in constants.
|
||||
(accepted, const_loop, "1.46.0", Some(52000), None),
|
||||
(accepted, const_loop, "1.46.0", Some(52000)),
|
||||
/// Allows panicking during const eval (producing compile-time errors).
|
||||
(accepted, const_panic, "1.57.0", Some(51999), None),
|
||||
(accepted, const_panic, "1.57.0", Some(51999)),
|
||||
/// Allows dereferencing raw pointers during const eval.
|
||||
(accepted, const_raw_ptr_deref, "1.58.0", Some(51911), None),
|
||||
(accepted, const_raw_ptr_deref, "1.58.0", Some(51911)),
|
||||
/// Allows implementing `Copy` for closures where possible (RFC 2132).
|
||||
(accepted, copy_closures, "1.26.0", Some(44490), None),
|
||||
(accepted, copy_closures, "1.26.0", Some(44490)),
|
||||
/// Allows `crate` in paths.
|
||||
(accepted, crate_in_paths, "1.30.0", Some(45477), None),
|
||||
(accepted, crate_in_paths, "1.30.0", Some(45477)),
|
||||
/// Allows using `#[debugger_visualizer]` attribute.
|
||||
(accepted, debugger_visualizer, "1.71.0", Some(95939), None),
|
||||
(accepted, debugger_visualizer, "1.71.0", Some(95939)),
|
||||
/// Allows rustc to inject a default alloc_error_handler
|
||||
(accepted, default_alloc_error_handler, "1.68.0", Some(66741), None),
|
||||
(accepted, default_alloc_error_handler, "1.68.0", Some(66741)),
|
||||
/// Allows using assigning a default type to type parameters in algebraic data type definitions.
|
||||
(accepted, default_type_params, "1.0.0", None, None),
|
||||
(accepted, default_type_params, "1.0.0", None),
|
||||
/// Allows `#[deprecated]` attribute.
|
||||
(accepted, deprecated, "1.9.0", Some(29935), None),
|
||||
(accepted, deprecated, "1.9.0", Some(29935)),
|
||||
/// Allows `#[derive(Default)]` and `#[default]` on enums.
|
||||
(accepted, derive_default_enum, "1.62.0", Some(86985), None),
|
||||
(accepted, derive_default_enum, "1.62.0", Some(86985)),
|
||||
/// Allows the use of destructuring assignments.
|
||||
(accepted, destructuring_assignment, "1.59.0", Some(71126), None),
|
||||
(accepted, destructuring_assignment, "1.59.0", Some(71126)),
|
||||
/// Allows `#[doc(alias = "...")]`.
|
||||
(accepted, doc_alias, "1.48.0", Some(50146), None),
|
||||
(accepted, doc_alias, "1.48.0", Some(50146)),
|
||||
/// Allows `..` in tuple (struct) patterns.
|
||||
(accepted, dotdot_in_tuple_patterns, "1.14.0", Some(33627), None),
|
||||
(accepted, dotdot_in_tuple_patterns, "1.14.0", Some(33627)),
|
||||
/// Allows `..=` in patterns (RFC 1192).
|
||||
(accepted, dotdoteq_in_patterns, "1.26.0", Some(28237), None),
|
||||
(accepted, dotdoteq_in_patterns, "1.26.0", Some(28237)),
|
||||
/// Allows `Drop` types in constants (RFC 1440).
|
||||
(accepted, drop_types_in_const, "1.22.0", Some(33156), None),
|
||||
(accepted, drop_types_in_const, "1.22.0", Some(33156)),
|
||||
/// Allows using `dyn Trait` as a syntax for trait objects.
|
||||
(accepted, dyn_trait, "1.27.0", Some(44662), None),
|
||||
(accepted, dyn_trait, "1.27.0", Some(44662)),
|
||||
/// Allows integer match exhaustiveness checking (RFC 2591).
|
||||
(accepted, exhaustive_integer_patterns, "1.33.0", Some(50907), None),
|
||||
(accepted, exhaustive_integer_patterns, "1.33.0", Some(50907)),
|
||||
/// Allows explicit generic arguments specification with `impl Trait` present.
|
||||
(accepted, explicit_generic_args_with_impl_trait, "1.63.0", Some(83701), None),
|
||||
(accepted, explicit_generic_args_with_impl_trait, "1.63.0", Some(83701)),
|
||||
/// Allows arbitrary expressions in key-value attributes at parse time.
|
||||
(accepted, extended_key_value_attributes, "1.54.0", Some(78835), None),
|
||||
(accepted, extended_key_value_attributes, "1.54.0", Some(78835)),
|
||||
/// Allows resolving absolute paths as paths from other crates.
|
||||
(accepted, extern_absolute_paths, "1.30.0", Some(44660), None),
|
||||
(accepted, extern_absolute_paths, "1.30.0", Some(44660)),
|
||||
/// Allows `extern crate foo as bar;`. This puts `bar` into extern prelude.
|
||||
(accepted, extern_crate_item_prelude, "1.31.0", Some(55599), None),
|
||||
(accepted, extern_crate_item_prelude, "1.31.0", Some(55599)),
|
||||
/// Allows `extern crate self as foo;`.
|
||||
/// This puts local crate root into extern prelude under name `foo`.
|
||||
(accepted, extern_crate_self, "1.34.0", Some(56409), None),
|
||||
(accepted, extern_crate_self, "1.34.0", Some(56409)),
|
||||
/// Allows access to crate names passed via `--extern` through prelude.
|
||||
(accepted, extern_prelude, "1.30.0", Some(44660), None),
|
||||
(accepted, extern_prelude, "1.30.0", Some(44660)),
|
||||
/// Allows using F16C intrinsics from `core::arch::{x86, x86_64}`.
|
||||
(accepted, f16c_target_feature, "1.68.0", Some(44839), None),
|
||||
(accepted, f16c_target_feature, "1.68.0", Some(44839)),
|
||||
/// Allows field shorthands (`x` meaning `x: x`) in struct literal expressions.
|
||||
(accepted, field_init_shorthand, "1.17.0", Some(37340), None),
|
||||
(accepted, field_init_shorthand, "1.17.0", Some(37340)),
|
||||
/// Allows `#[must_use]` on functions, and introduces must-use operators (RFC 1940).
|
||||
(accepted, fn_must_use, "1.27.0", Some(43302), None),
|
||||
(accepted, fn_must_use, "1.27.0", Some(43302)),
|
||||
/// Allows capturing variables in scope using format_args!
|
||||
(accepted, format_args_capture, "1.58.0", Some(67984), None),
|
||||
(accepted, format_args_capture, "1.58.0", Some(67984)),
|
||||
/// Allows associated types to be generic, e.g., `type Foo<T>;` (RFC 1598).
|
||||
(accepted, generic_associated_types, "1.65.0", Some(44265), None),
|
||||
(accepted, generic_associated_types, "1.65.0", Some(44265)),
|
||||
/// Allows attributes on lifetime/type formal parameters in generics (RFC 1327).
|
||||
(accepted, generic_param_attrs, "1.27.0", Some(48848), None),
|
||||
(accepted, generic_param_attrs, "1.27.0", Some(48848)),
|
||||
/// Allows the `#[global_allocator]` attribute.
|
||||
(accepted, global_allocator, "1.28.0", Some(27389), None),
|
||||
(accepted, global_allocator, "1.28.0", Some(27389)),
|
||||
// FIXME: explain `globs`.
|
||||
(accepted, globs, "1.0.0", None, None),
|
||||
(accepted, globs, "1.0.0", None),
|
||||
/// Allows using `..=X` as a pattern.
|
||||
(accepted, half_open_range_patterns, "1.66.0", Some(67264), None),
|
||||
(accepted, half_open_range_patterns, "1.66.0", Some(67264)),
|
||||
/// Allows using the `u128` and `i128` types.
|
||||
(accepted, i128_type, "1.26.0", Some(35118), None),
|
||||
(accepted, i128_type, "1.26.0", Some(35118)),
|
||||
/// Allows the use of `if let` expressions.
|
||||
(accepted, if_let, "1.0.0", None, None),
|
||||
(accepted, if_let, "1.0.0", None),
|
||||
/// Allows top level or-patterns (`p | q`) in `if let` and `while let`.
|
||||
(accepted, if_while_or_patterns, "1.33.0", Some(48215), None),
|
||||
(accepted, if_while_or_patterns, "1.33.0", Some(48215)),
|
||||
/// Allows lifetime elision in `impl` headers. For example:
|
||||
/// + `impl<I:Iterator> Iterator for &mut Iterator`
|
||||
/// + `impl Debug for Foo<'_>`
|
||||
(accepted, impl_header_lifetime_elision, "1.31.0", Some(15872), None),
|
||||
(accepted, impl_header_lifetime_elision, "1.31.0", Some(15872)),
|
||||
/// Allows referencing `Self` and projections in impl-trait.
|
||||
(accepted, impl_trait_projections, "1.74.0", Some(103532), None),
|
||||
(accepted, impl_trait_projections, "1.74.0", Some(103532)),
|
||||
/// Allows using `a..=b` and `..=b` as inclusive range syntaxes.
|
||||
(accepted, inclusive_range_syntax, "1.26.0", Some(28237), None),
|
||||
(accepted, inclusive_range_syntax, "1.26.0", Some(28237)),
|
||||
/// Allows inferring outlives requirements (RFC 2093).
|
||||
(accepted, infer_outlives_requirements, "1.30.0", Some(44493), None),
|
||||
(accepted, infer_outlives_requirements, "1.30.0", Some(44493)),
|
||||
/// Allows irrefutable patterns in `if let` and `while let` statements (RFC 2086).
|
||||
(accepted, irrefutable_let_patterns, "1.33.0", Some(44495), None),
|
||||
(accepted, irrefutable_let_patterns, "1.33.0", Some(44495)),
|
||||
/// Allows `#[instruction_set(_)]` attribute.
|
||||
(accepted, isa_attribute, "1.67.0", Some(74727), None),
|
||||
(accepted, isa_attribute, "1.67.0", Some(74727)),
|
||||
/// Allows some increased flexibility in the name resolution rules,
|
||||
/// especially around globs and shadowing (RFC 1560).
|
||||
(accepted, item_like_imports, "1.15.0", Some(35120), None),
|
||||
(accepted, item_like_imports, "1.15.0", Some(35120)),
|
||||
/// Allows `'a: { break 'a; }`.
|
||||
(accepted, label_break_value, "1.65.0", Some(48594), None),
|
||||
(accepted, label_break_value, "1.65.0", Some(48594)),
|
||||
/// Allows `let...else` statements.
|
||||
(accepted, let_else, "1.65.0", Some(87335), None),
|
||||
(accepted, let_else, "1.65.0", Some(87335)),
|
||||
/// Allows `break {expr}` with a value inside `loop`s.
|
||||
(accepted, loop_break_value, "1.19.0", Some(37339), None),
|
||||
(accepted, loop_break_value, "1.19.0", Some(37339)),
|
||||
/// Allows use of `?` as the Kleene "at most one" operator in macros.
|
||||
(accepted, macro_at_most_once_rep, "1.32.0", Some(48075), None),
|
||||
(accepted, macro_at_most_once_rep, "1.32.0", Some(48075)),
|
||||
/// Allows macro attributes to observe output of `#[derive]`.
|
||||
(accepted, macro_attributes_in_derive_output, "1.57.0", Some(81119), None),
|
||||
(accepted, macro_attributes_in_derive_output, "1.57.0", Some(81119)),
|
||||
/// Allows use of the `:lifetime` macro fragment specifier.
|
||||
(accepted, macro_lifetime_matcher, "1.27.0", Some(34303), None),
|
||||
(accepted, macro_lifetime_matcher, "1.27.0", Some(34303)),
|
||||
/// Allows use of the `:literal` macro fragment specifier (RFC 1576).
|
||||
(accepted, macro_literal_matcher, "1.32.0", Some(35625), None),
|
||||
(accepted, macro_literal_matcher, "1.32.0", Some(35625)),
|
||||
/// Allows `macro_rules!` items.
|
||||
(accepted, macro_rules, "1.0.0", None, None),
|
||||
(accepted, macro_rules, "1.0.0", None),
|
||||
/// Allows use of the `:vis` macro fragment specifier
|
||||
(accepted, macro_vis_matcher, "1.30.0", Some(41022), None),
|
||||
(accepted, macro_vis_matcher, "1.30.0", Some(41022)),
|
||||
/// Allows macro invocations in `extern {}` blocks.
|
||||
(accepted, macros_in_extern, "1.40.0", Some(49476), None),
|
||||
(accepted, macros_in_extern, "1.40.0", Some(49476)),
|
||||
/// Allows '|' at beginning of match arms (RFC 1925).
|
||||
(accepted, match_beginning_vert, "1.25.0", Some(44101), None),
|
||||
(accepted, match_beginning_vert, "1.25.0", Some(44101)),
|
||||
/// Allows default match binding modes (RFC 2005).
|
||||
(accepted, match_default_bindings, "1.26.0", Some(42640), None),
|
||||
(accepted, match_default_bindings, "1.26.0", Some(42640)),
|
||||
/// Allows `impl Trait` with multiple unrelated lifetimes.
|
||||
(accepted, member_constraints, "1.54.0", Some(61997), None),
|
||||
(accepted, member_constraints, "1.54.0", Some(61997)),
|
||||
/// Allows the definition of `const fn` functions.
|
||||
(accepted, min_const_fn, "1.31.0", Some(53555), None),
|
||||
(accepted, min_const_fn, "1.31.0", Some(53555)),
|
||||
/// The smallest useful subset of const generics.
|
||||
(accepted, min_const_generics, "1.51.0", Some(74878), None),
|
||||
(accepted, min_const_generics, "1.51.0", Some(74878)),
|
||||
/// Allows calling `const unsafe fn` inside `unsafe` blocks in `const fn` functions.
|
||||
(accepted, min_const_unsafe_fn, "1.33.0", Some(55607), None),
|
||||
(accepted, min_const_unsafe_fn, "1.33.0", Some(55607)),
|
||||
/// Allows using `Self` and associated types in struct expressions and patterns.
|
||||
(accepted, more_struct_aliases, "1.16.0", Some(37544), None),
|
||||
(accepted, more_struct_aliases, "1.16.0", Some(37544)),
|
||||
/// Allows using the MOVBE target feature.
|
||||
(accepted, movbe_target_feature, "1.70.0", Some(44839), None),
|
||||
(accepted, movbe_target_feature, "1.70.0", Some(44839)),
|
||||
/// Allows patterns with concurrent by-move and by-ref bindings.
|
||||
/// For example, you can write `Foo(a, ref b)` where `a` is by-move and `b` is by-ref.
|
||||
(accepted, move_ref_pattern, "1.49.0", Some(68354), None),
|
||||
(accepted, move_ref_pattern, "1.49.0", Some(68354)),
|
||||
/// Allows specifying modifiers in the link attribute: `#[link(modifiers = "...")]`
|
||||
(accepted, native_link_modifiers, "1.61.0", Some(81490), None),
|
||||
(accepted, native_link_modifiers, "1.61.0", Some(81490)),
|
||||
/// Allows specifying the bundle link modifier
|
||||
(accepted, native_link_modifiers_bundle, "1.63.0", Some(81490), None),
|
||||
(accepted, native_link_modifiers_bundle, "1.63.0", Some(81490)),
|
||||
/// Allows specifying the verbatim link modifier
|
||||
(accepted, native_link_modifiers_verbatim, "1.67.0", Some(81490), None),
|
||||
(accepted, native_link_modifiers_verbatim, "1.67.0", Some(81490)),
|
||||
/// Allows specifying the whole-archive link modifier
|
||||
(accepted, native_link_modifiers_whole_archive, "1.61.0", Some(81490), None),
|
||||
(accepted, native_link_modifiers_whole_archive, "1.61.0", Some(81490)),
|
||||
/// Allows using non lexical lifetimes (RFC 2094).
|
||||
(accepted, nll, "1.63.0", Some(43234), None),
|
||||
(accepted, nll, "1.63.0", Some(43234)),
|
||||
/// Allows using `#![no_std]`.
|
||||
(accepted, no_std, "1.6.0", None, None),
|
||||
(accepted, no_std, "1.6.0", None),
|
||||
/// Allows defining identifiers beyond ASCII.
|
||||
(accepted, non_ascii_idents, "1.53.0", Some(55467), None),
|
||||
(accepted, non_ascii_idents, "1.53.0", Some(55467)),
|
||||
/// Allows future-proofing enums/structs with the `#[non_exhaustive]` attribute (RFC 2008).
|
||||
(accepted, non_exhaustive, "1.40.0", Some(44109), None),
|
||||
(accepted, non_exhaustive, "1.40.0", Some(44109)),
|
||||
/// Allows `foo.rs` as an alternative to `foo/mod.rs`.
|
||||
(accepted, non_modrs_mods, "1.30.0", Some(44660), None),
|
||||
(accepted, non_modrs_mods, "1.30.0", Some(44660)),
|
||||
/// Allows the use of or-patterns (e.g., `0 | 1`).
|
||||
(accepted, or_patterns, "1.53.0", Some(54883), None),
|
||||
(accepted, or_patterns, "1.53.0", Some(54883)),
|
||||
/// Allows using `+bundle,+whole-archive` link modifiers with native libs.
|
||||
(accepted, packed_bundled_libs, "1.74.0", Some(108081), None),
|
||||
(accepted, packed_bundled_libs, "1.74.0", Some(108081)),
|
||||
/// Allows annotating functions conforming to `fn(&PanicInfo) -> !` with `#[panic_handler]`.
|
||||
/// This defines the behavior of panics.
|
||||
(accepted, panic_handler, "1.30.0", Some(44489), None),
|
||||
(accepted, panic_handler, "1.30.0", Some(44489)),
|
||||
/// Allows attributes in formal function parameters.
|
||||
(accepted, param_attrs, "1.39.0", Some(60406), None),
|
||||
(accepted, param_attrs, "1.39.0", Some(60406)),
|
||||
/// Allows parentheses in patterns.
|
||||
(accepted, pattern_parentheses, "1.31.0", Some(51087), None),
|
||||
(accepted, pattern_parentheses, "1.31.0", Some(51087)),
|
||||
/// Allows procedural macros in `proc-macro` crates.
|
||||
(accepted, proc_macro, "1.29.0", Some(38356), None),
|
||||
(accepted, proc_macro, "1.29.0", Some(38356)),
|
||||
/// Allows multi-segment paths in attributes and derives.
|
||||
(accepted, proc_macro_path_invoc, "1.30.0", Some(38356), None),
|
||||
(accepted, proc_macro_path_invoc, "1.30.0", Some(38356)),
|
||||
/// Allows `pub(restricted)` visibilities (RFC 1422).
|
||||
(accepted, pub_restricted, "1.18.0", Some(32409), None),
|
||||
(accepted, pub_restricted, "1.18.0", Some(32409)),
|
||||
/// Allows use of the postfix `?` operator in expressions.
|
||||
(accepted, question_mark, "1.13.0", Some(31436), None),
|
||||
(accepted, question_mark, "1.13.0", Some(31436)),
|
||||
/// Allows the use of raw-dylibs (RFC 2627).
|
||||
(accepted, raw_dylib, "1.71.0", Some(58713), None),
|
||||
(accepted, raw_dylib, "1.71.0", Some(58713)),
|
||||
/// Allows keywords to be escaped for use as identifiers.
|
||||
(accepted, raw_identifiers, "1.30.0", Some(48589), None),
|
||||
(accepted, raw_identifiers, "1.30.0", Some(48589)),
|
||||
/// Allows relaxing the coherence rules such that
|
||||
/// `impl<T> ForeignTrait<LocalType> for ForeignType<T>` is permitted.
|
||||
(accepted, re_rebalance_coherence, "1.41.0", Some(55437), None),
|
||||
(accepted, re_rebalance_coherence, "1.41.0", Some(55437)),
|
||||
/// Allows numeric fields in struct expressions and patterns.
|
||||
(accepted, relaxed_adts, "1.19.0", Some(35626), None),
|
||||
(accepted, relaxed_adts, "1.19.0", Some(35626)),
|
||||
/// Lessens the requirements for structs to implement `Unsize`.
|
||||
(accepted, relaxed_struct_unsize, "1.58.0", Some(81793), None),
|
||||
(accepted, relaxed_struct_unsize, "1.58.0", Some(81793)),
|
||||
/// Allows `repr(align(16))` struct attribute (RFC 1358).
|
||||
(accepted, repr_align, "1.25.0", Some(33626), None),
|
||||
(accepted, repr_align, "1.25.0", Some(33626)),
|
||||
/// Allows using `#[repr(align(X))]` on enums with equivalent semantics
|
||||
/// to wrapping an enum in a wrapper struct with `#[repr(align(X))]`.
|
||||
(accepted, repr_align_enum, "1.37.0", Some(57996), None),
|
||||
(accepted, repr_align_enum, "1.37.0", Some(57996)),
|
||||
/// Allows `#[repr(packed(N))]` attribute on structs.
|
||||
(accepted, repr_packed, "1.33.0", Some(33158), None),
|
||||
(accepted, repr_packed, "1.33.0", Some(33158)),
|
||||
/// Allows `#[repr(transparent)]` attribute on newtype structs.
|
||||
(accepted, repr_transparent, "1.28.0", Some(43036), None),
|
||||
(accepted, repr_transparent, "1.28.0", Some(43036)),
|
||||
/// Allows return-position `impl Trait` in traits.
|
||||
(accepted, return_position_impl_trait_in_trait, "1.75.0", Some(91611), None),
|
||||
(accepted, return_position_impl_trait_in_trait, "1.75.0", Some(91611)),
|
||||
/// Allows code like `let x: &'static u32 = &42` to work (RFC 1414).
|
||||
(accepted, rvalue_static_promotion, "1.21.0", Some(38865), None),
|
||||
(accepted, rvalue_static_promotion, "1.21.0", Some(38865)),
|
||||
/// Allows `Self` in type definitions (RFC 2300).
|
||||
(accepted, self_in_typedefs, "1.32.0", Some(49303), None),
|
||||
(accepted, self_in_typedefs, "1.32.0", Some(49303)),
|
||||
/// Allows `Self` struct constructor (RFC 2302).
|
||||
(accepted, self_struct_ctor, "1.32.0", Some(51994), None),
|
||||
(accepted, self_struct_ctor, "1.32.0", Some(51994)),
|
||||
/// Allows using subslice patterns, `[a, .., b]` and `[a, xs @ .., b]`.
|
||||
(accepted, slice_patterns, "1.42.0", Some(62254), None),
|
||||
(accepted, slice_patterns, "1.42.0", Some(62254)),
|
||||
/// Allows use of `&foo[a..b]` as a slicing syntax.
|
||||
(accepted, slicing_syntax, "1.0.0", None, None),
|
||||
(accepted, slicing_syntax, "1.0.0", None),
|
||||
/// Allows elision of `'static` lifetimes in `static`s and `const`s.
|
||||
(accepted, static_in_const, "1.17.0", Some(35897), None),
|
||||
(accepted, static_in_const, "1.17.0", Some(35897)),
|
||||
/// Allows the definition recursive static items.
|
||||
(accepted, static_recursion, "1.17.0", Some(29719), None),
|
||||
(accepted, static_recursion, "1.17.0", Some(29719)),
|
||||
/// Allows attributes on struct literal fields.
|
||||
(accepted, struct_field_attributes, "1.20.0", Some(38814), None),
|
||||
(accepted, struct_field_attributes, "1.20.0", Some(38814)),
|
||||
/// Allows struct variants `Foo { baz: u8, .. }` in enums (RFC 418).
|
||||
(accepted, struct_variant, "1.0.0", None, None),
|
||||
(accepted, struct_variant, "1.0.0", None),
|
||||
/// Allows `#[target_feature(...)]`.
|
||||
(accepted, target_feature, "1.27.0", None, None),
|
||||
(accepted, target_feature, "1.27.0", None),
|
||||
/// Allows `fn main()` with return types which implements `Termination` (RFC 1937).
|
||||
(accepted, termination_trait, "1.26.0", Some(43301), None),
|
||||
(accepted, termination_trait, "1.26.0", Some(43301)),
|
||||
/// Allows `#[test]` functions where the return type implements `Termination` (RFC 1937).
|
||||
(accepted, termination_trait_test, "1.27.0", Some(48854), None),
|
||||
(accepted, termination_trait_test, "1.27.0", Some(48854)),
|
||||
/// Allows attributes scoped to tools.
|
||||
(accepted, tool_attributes, "1.30.0", Some(44690), None),
|
||||
(accepted, tool_attributes, "1.30.0", Some(44690)),
|
||||
/// Allows scoped lints.
|
||||
(accepted, tool_lints, "1.31.0", Some(44690), None),
|
||||
(accepted, tool_lints, "1.31.0", Some(44690)),
|
||||
/// Allows `#[track_caller]` to be used which provides
|
||||
/// accurate caller location reporting during panic (RFC 2091).
|
||||
(accepted, track_caller, "1.46.0", Some(47809), None),
|
||||
(accepted, track_caller, "1.46.0", Some(47809)),
|
||||
/// Allows dyn upcasting trait objects via supertraits.
|
||||
/// Dyn upcasting is casting, e.g., `dyn Foo -> dyn Bar` where `Foo: Bar`.
|
||||
(accepted, trait_upcasting, "CURRENT_RUSTC_VERSION", Some(65991), None),
|
||||
(accepted, trait_upcasting, "CURRENT_RUSTC_VERSION", Some(65991)),
|
||||
/// Allows #[repr(transparent)] on univariant enums (RFC 2645).
|
||||
(accepted, transparent_enums, "1.42.0", Some(60405), None),
|
||||
(accepted, transparent_enums, "1.42.0", Some(60405)),
|
||||
/// Allows indexing tuples.
|
||||
(accepted, tuple_indexing, "1.0.0", None, None),
|
||||
(accepted, tuple_indexing, "1.0.0", None),
|
||||
/// Allows paths to enum variants on type aliases including `Self`.
|
||||
(accepted, type_alias_enum_variants, "1.37.0", Some(49683), None),
|
||||
(accepted, type_alias_enum_variants, "1.37.0", Some(49683)),
|
||||
/// Allows macros to appear in the type position.
|
||||
(accepted, type_macros, "1.13.0", Some(27245), None),
|
||||
(accepted, type_macros, "1.13.0", Some(27245)),
|
||||
/// Allows `const _: TYPE = VALUE`.
|
||||
(accepted, underscore_const_names, "1.37.0", Some(54912), None),
|
||||
(accepted, underscore_const_names, "1.37.0", Some(54912)),
|
||||
/// Allows `use path as _;` and `extern crate c as _;`.
|
||||
(accepted, underscore_imports, "1.33.0", Some(48216), None),
|
||||
(accepted, underscore_imports, "1.33.0", Some(48216)),
|
||||
/// Allows `'_` placeholder lifetimes.
|
||||
(accepted, underscore_lifetimes, "1.26.0", Some(44524), None),
|
||||
(accepted, underscore_lifetimes, "1.26.0", Some(44524)),
|
||||
/// Allows `use x::y;` to search `x` in the current scope.
|
||||
(accepted, uniform_paths, "1.32.0", Some(53130), None),
|
||||
(accepted, uniform_paths, "1.32.0", Some(53130)),
|
||||
/// Allows `impl Trait` in function arguments.
|
||||
(accepted, universal_impl_trait, "1.26.0", Some(34511), None),
|
||||
(accepted, universal_impl_trait, "1.26.0", Some(34511)),
|
||||
/// Allows arbitrary delimited token streams in non-macro attributes.
|
||||
(accepted, unrestricted_attribute_tokens, "1.34.0", Some(55208), None),
|
||||
(accepted, unrestricted_attribute_tokens, "1.34.0", Some(55208)),
|
||||
/// The `unsafe_op_in_unsafe_fn` lint (allowed by default): no longer treat an unsafe function as an unsafe block.
|
||||
(accepted, unsafe_block_in_unsafe_fn, "1.52.0", Some(71668), None),
|
||||
(accepted, unsafe_block_in_unsafe_fn, "1.52.0", Some(71668)),
|
||||
/// Allows importing and reexporting macros with `use`,
|
||||
/// enables macro modularization in general.
|
||||
(accepted, use_extern_macros, "1.30.0", Some(35896), None),
|
||||
(accepted, use_extern_macros, "1.30.0", Some(35896)),
|
||||
/// Allows nested groups in `use` items (RFC 2128).
|
||||
(accepted, use_nested_groups, "1.25.0", Some(44494), None),
|
||||
(accepted, use_nested_groups, "1.25.0", Some(44494)),
|
||||
/// Allows `#[used]` to preserve symbols (see llvm.compiler.used).
|
||||
(accepted, used, "1.30.0", Some(40289), None),
|
||||
(accepted, used, "1.30.0", Some(40289)),
|
||||
/// Allows the use of `while let` expressions.
|
||||
(accepted, while_let, "1.0.0", None, None),
|
||||
(accepted, while_let, "1.0.0", None),
|
||||
/// Allows `#![windows_subsystem]`.
|
||||
(accepted, windows_subsystem, "1.18.0", Some(37499), None),
|
||||
(accepted, windows_subsystem, "1.18.0", Some(37499)),
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
// Features are listed in alphabetical order. Tidy will fail if you don't keep it this way.
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
|
@ -26,7 +26,7 @@ mod unstable;
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
use rustc_span::{edition::Edition, symbol::Symbol};
|
||||
use rustc_span::symbol::Symbol;
|
||||
use std::num::NonZeroU32;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@ -34,7 +34,6 @@ pub struct Feature {
|
||||
pub name: Symbol,
|
||||
pub since: &'static str,
|
||||
issue: Option<NonZeroU32>,
|
||||
pub edition: Option<Edition>,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
|
@ -10,7 +10,7 @@ pub struct RemovedFeature {
|
||||
|
||||
macro_rules! declare_features {
|
||||
($(
|
||||
$(#[doc = $doc:tt])* (removed, $feature:ident, $ver:expr, $issue:expr, None, $reason:expr),
|
||||
$(#[doc = $doc:tt])* (removed, $feature:ident, $ver:expr, $issue:expr, $reason:expr),
|
||||
)+) => {
|
||||
/// Formerly unstable features that have now been removed.
|
||||
pub const REMOVED_FEATURES: &[RemovedFeature] = &[
|
||||
@ -19,7 +19,6 @@ macro_rules! declare_features {
|
||||
name: sym::$feature,
|
||||
since: $ver,
|
||||
issue: to_nonzero($issue),
|
||||
edition: None,
|
||||
},
|
||||
reason: $reason
|
||||
}),+
|
||||
@ -33,176 +32,178 @@ declare_features! (
|
||||
// feature-group-start: removed features
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
(removed, advanced_slice_patterns, "1.0.0", Some(62254), None,
|
||||
(removed, advanced_slice_patterns, "1.0.0", Some(62254),
|
||||
Some("merged into `#![feature(slice_patterns)]`")),
|
||||
(removed, allocator, "1.0.0", None, None, None),
|
||||
(removed, allocator, "1.0.0", None, None),
|
||||
/// Allows a test to fail without failing the whole suite.
|
||||
(removed, allow_fail, "1.19.0", Some(46488), None, Some("removed due to no clear use cases")),
|
||||
(removed, await_macro, "1.38.0", Some(50547), None,
|
||||
(removed, allow_fail, "1.19.0", Some(46488), Some("removed due to no clear use cases")),
|
||||
(removed, await_macro, "1.38.0", Some(50547),
|
||||
Some("subsumed by `.await` syntax")),
|
||||
/// Allows using the `box $expr` syntax.
|
||||
(removed, box_syntax, "1.70.0", Some(49733), None, Some("replaced with `#[rustc_box]`")),
|
||||
(removed, box_syntax, "1.70.0", Some(49733), Some("replaced with `#[rustc_box]`")),
|
||||
/// Allows capturing disjoint fields in a closure/coroutine (RFC 2229).
|
||||
(removed, capture_disjoint_fields, "1.49.0", Some(53488), None, Some("stabilized in Rust 2021")),
|
||||
(removed, capture_disjoint_fields, "1.49.0", Some(53488), Some("stabilized in Rust 2021")),
|
||||
/// Allows comparing raw pointers during const eval.
|
||||
(removed, const_compare_raw_pointers, "1.46.0", Some(53020), None,
|
||||
(removed, const_compare_raw_pointers, "1.46.0", Some(53020),
|
||||
Some("cannot be allowed in const eval in any meaningful way")),
|
||||
/// Allows limiting the evaluation steps of const expressions
|
||||
(removed, const_eval_limit, "1.43.0", Some(67217), None, Some("removed the limit entirely")),
|
||||
(removed, const_eval_limit, "1.43.0", Some(67217), Some("removed the limit entirely")),
|
||||
/// Allows non-trivial generic constants which have to be manually propagated upwards.
|
||||
(removed, const_evaluatable_checked, "1.48.0", Some(76560), None, Some("renamed to `generic_const_exprs`")),
|
||||
(removed, const_evaluatable_checked, "1.48.0", Some(76560), Some("renamed to `generic_const_exprs`")),
|
||||
/// Allows the definition of `const` functions with some advanced features.
|
||||
(removed, const_fn, "1.54.0", Some(57563), None,
|
||||
(removed, const_fn, "1.54.0", Some(57563),
|
||||
Some("split into finer-grained feature gates")),
|
||||
/// Allows const generic types (e.g. `struct Foo<const N: usize>(...);`).
|
||||
(removed, const_generics, "1.34.0", Some(44580), None,
|
||||
(removed, const_generics, "1.34.0", Some(44580),
|
||||
Some("removed in favor of `#![feature(adt_const_params)]` and `#![feature(generic_const_exprs)]`")),
|
||||
/// Allows `[x; N]` where `x` is a constant (RFC 2203).
|
||||
(removed, const_in_array_repeat_expressions, "1.37.0", Some(49147), None,
|
||||
(removed, const_in_array_repeat_expressions, "1.37.0", Some(49147),
|
||||
Some("removed due to causing promotable bugs")),
|
||||
/// Allows casting raw pointers to `usize` during const eval.
|
||||
(removed, const_raw_ptr_to_usize_cast, "1.55.0", Some(51910), None,
|
||||
(removed, const_raw_ptr_to_usize_cast, "1.55.0", Some(51910),
|
||||
Some("at compile-time, pointers do not have an integer value, so these casts cannot be properly supported")),
|
||||
/// Allows `T: ?const Trait` syntax in bounds.
|
||||
(removed, const_trait_bound_opt_out, "1.42.0", Some(67794), None,
|
||||
(removed, const_trait_bound_opt_out, "1.42.0", Some(67794),
|
||||
Some("Removed in favor of `~const` bound in #![feature(const_trait_impl)]")),
|
||||
/// Allows using `crate` as visibility modifier, synonymous with `pub(crate)`.
|
||||
(removed, crate_visibility_modifier, "1.63.0", Some(53120), None, Some("removed in favor of `pub(crate)`")),
|
||||
(removed, crate_visibility_modifier, "1.63.0", Some(53120), Some("removed in favor of `pub(crate)`")),
|
||||
/// Allows using custom attributes (RFC 572).
|
||||
(removed, custom_attribute, "1.0.0", Some(29642), None,
|
||||
(removed, custom_attribute, "1.0.0", Some(29642),
|
||||
Some("removed in favor of `#![register_tool]` and `#![register_attr]`")),
|
||||
/// Allows the use of `#[derive(Anything)]` as sugar for `#[derive_Anything]`.
|
||||
(removed, custom_derive, "1.32.0", Some(29644), None,
|
||||
(removed, custom_derive, "1.32.0", Some(29644),
|
||||
Some("subsumed by `#[proc_macro_derive]`")),
|
||||
/// Allows using `#[doc(keyword = "...")]`.
|
||||
(removed, doc_keyword, "1.28.0", Some(51315), None,
|
||||
(removed, doc_keyword, "1.28.0", Some(51315),
|
||||
Some("merged into `#![feature(rustdoc_internals)]`")),
|
||||
/// Allows using `doc(primitive)` without a future-incompat warning.
|
||||
(removed, doc_primitive, "1.56.0", Some(88070), None,
|
||||
(removed, doc_primitive, "1.56.0", Some(88070),
|
||||
Some("merged into `#![feature(rustdoc_internals)]`")),
|
||||
/// Allows `#[doc(spotlight)]`.
|
||||
/// The attribute was renamed to `#[doc(notable_trait)]`
|
||||
/// and the feature to `doc_notable_trait`.
|
||||
(removed, doc_spotlight, "1.22.0", Some(45040), None,
|
||||
(removed, doc_spotlight, "1.22.0", Some(45040),
|
||||
Some("renamed to `doc_notable_trait`")),
|
||||
/// Allows using `#[unsafe_destructor_blind_to_params]` (RFC 1238).
|
||||
(removed, dropck_parametricity, "1.38.0", Some(28498), None, None),
|
||||
(removed, dropck_parametricity, "1.38.0", Some(28498), None),
|
||||
/// Allows defining `existential type`s.
|
||||
(removed, existential_type, "1.38.0", Some(63063), None,
|
||||
(removed, existential_type, "1.38.0", Some(63063),
|
||||
Some("removed in favor of `#![feature(type_alias_impl_trait)]`")),
|
||||
/// Paths of the form: `extern::foo::bar`
|
||||
(removed, extern_in_paths, "1.33.0", Some(55600), None,
|
||||
(removed, extern_in_paths, "1.33.0", Some(55600),
|
||||
Some("subsumed by `::foo::bar` paths")),
|
||||
/// Allows `#[doc(include = "some-file")]`.
|
||||
(removed, external_doc, "1.54.0", Some(44732), None,
|
||||
(removed, external_doc, "1.54.0", Some(44732),
|
||||
Some("use #[doc = include_str!(\"filename\")] instead, which handles macro invocations")),
|
||||
/// Allows generators to be cloned.
|
||||
(removed, generator_clone, "1.65.0", Some(95360), None, Some("renamed to `coroutine_clone`")),
|
||||
(removed, generator_clone, "1.65.0", Some(95360), Some("renamed to `coroutine_clone`")),
|
||||
/// Allows defining generators.
|
||||
(removed, generators, "1.21.0", Some(43122), None, Some("renamed to `coroutines`")),
|
||||
(removed, generators, "1.21.0", Some(43122), Some("renamed to `coroutines`")),
|
||||
/// Allows `impl Trait` in bindings (`let`, `const`, `static`).
|
||||
(removed, impl_trait_in_bindings, "1.55.0", Some(63065), None,
|
||||
(removed, impl_trait_in_bindings, "1.55.0", Some(63065),
|
||||
Some("the implementation was not maintainable, the feature may get reintroduced once the current refactorings are done")),
|
||||
(removed, import_shadowing, "1.0.0", None, None, None),
|
||||
(removed, import_shadowing, "1.0.0", None, None),
|
||||
/// Allows in-band quantification of lifetime bindings (e.g., `fn foo(x: &'a u8) -> &'a u8`).
|
||||
(removed, in_band_lifetimes, "1.23.0", Some(44524), None,
|
||||
(removed, in_band_lifetimes, "1.23.0", Some(44524),
|
||||
Some("removed due to unsolved ergonomic questions and added lifetime resolution complexity")),
|
||||
/// Allows inferring `'static` outlives requirements (RFC 2093).
|
||||
(removed, infer_static_outlives_requirements, "1.63.0", Some(54185), None,
|
||||
(removed, infer_static_outlives_requirements, "1.63.0", Some(54185),
|
||||
Some("removed as it caused some confusion and discussion was inactive for years")),
|
||||
/// Lazily evaluate constants. This allows constants to depend on type parameters.
|
||||
(removed, lazy_normalization_consts, "1.46.0", Some(72219), None, Some("superseded by `generic_const_exprs`")),
|
||||
(removed, lazy_normalization_consts, "1.46.0", Some(72219), Some("superseded by `generic_const_exprs`")),
|
||||
/// Allows using the `#[link_args]` attribute.
|
||||
(removed, link_args, "1.53.0", Some(29596), None,
|
||||
(removed, link_args, "1.53.0", Some(29596),
|
||||
Some("removed in favor of using `-C link-arg=ARG` on command line, \
|
||||
which is available from cargo build scripts with `cargo:rustc-link-arg` now")),
|
||||
(removed, macro_reexport, "1.0.0", Some(29638), None,
|
||||
(removed, macro_reexport, "1.0.0", Some(29638),
|
||||
Some("subsumed by `pub use`")),
|
||||
/// Allows using `#[main]` to replace the entrypoint `#[lang = "start"]` calls.
|
||||
(removed, main, "1.53.0", Some(29634), None, None),
|
||||
(removed, managed_boxes, "1.0.0", None, None, None),
|
||||
(removed, main, "1.53.0", Some(29634), None),
|
||||
(removed, managed_boxes, "1.0.0", None, None),
|
||||
/// Allows the use of type alias impl trait in function return positions
|
||||
(removed, min_type_alias_impl_trait, "1.56.0", Some(63063), None,
|
||||
(removed, min_type_alias_impl_trait, "1.56.0", Some(63063),
|
||||
Some("removed in favor of full type_alias_impl_trait")),
|
||||
(removed, needs_allocator, "1.4.0", Some(27389), None,
|
||||
(removed, needs_allocator, "1.4.0", Some(27389),
|
||||
Some("subsumed by `#![feature(allocator_internals)]`")),
|
||||
/// Allows use of unary negate on unsigned integers, e.g., -e for e: u8
|
||||
(removed, negate_unsigned, "1.0.0", Some(29645), None, None),
|
||||
(removed, negate_unsigned, "1.0.0", Some(29645), None),
|
||||
/// Allows `#[no_coverage]` on functions.
|
||||
/// The feature was renamed to `coverage_attribute` and the attribute to `#[coverage(on|off)]`
|
||||
(removed, no_coverage, "1.74.0", Some(84605), None, Some("renamed to `coverage_attribute`")),
|
||||
(removed, no_coverage, "1.74.0", Some(84605), Some("renamed to `coverage_attribute`")),
|
||||
/// Allows `#[no_debug]`.
|
||||
(removed, no_debug, "1.43.0", Some(29721), None, Some("removed due to lack of demand")),
|
||||
(removed, no_debug, "1.43.0", Some(29721), Some("removed due to lack of demand")),
|
||||
/// Note: this feature was previously recorded in a separate
|
||||
/// `STABLE_REMOVED` list because it, uniquely, was once stable but was
|
||||
/// then removed. But there was no utility storing it separately, so now
|
||||
/// it's in this list.
|
||||
(removed, no_stack_check, "1.0.0", None, None, None),
|
||||
(removed, no_stack_check, "1.0.0", None, None),
|
||||
/// Allows using `#[on_unimplemented(..)]` on traits.
|
||||
/// (Moved to `rustc_attrs`.)
|
||||
(removed, on_unimplemented, "1.40.0", None, None, None),
|
||||
(removed, on_unimplemented, "1.40.0", None, None),
|
||||
/// A way to temporarily opt out of opt-in copy. This will *never* be accepted.
|
||||
(removed, opt_out_copy, "1.0.0", None, None, None),
|
||||
(removed, opt_out_copy, "1.0.0", None, None),
|
||||
/// Allows features specific to OIBIT (now called auto traits).
|
||||
/// Renamed to `auto_traits`.
|
||||
(removed, optin_builtin_traits, "1.0.0", Some(13231), None,
|
||||
(removed, optin_builtin_traits, "1.0.0", Some(13231),
|
||||
Some("renamed to `auto_traits`")),
|
||||
/// Allows overlapping impls of marker traits.
|
||||
(removed, overlapping_marker_traits, "1.42.0", Some(29864), None,
|
||||
(removed, overlapping_marker_traits, "1.42.0", Some(29864),
|
||||
Some("removed in favor of `#![feature(marker_trait_attr)]`")),
|
||||
(removed, panic_implementation, "1.28.0", Some(44489), None,
|
||||
(removed, panic_implementation, "1.28.0", Some(44489),
|
||||
Some("subsumed by `#[panic_handler]`")),
|
||||
/// Allows using `#![plugin(myplugin)]`.
|
||||
(removed, plugin, "1.75.0", Some(29597), None,
|
||||
(removed, plugin, "1.75.0", Some(29597),
|
||||
Some("plugins are no longer supported")),
|
||||
/// Allows using `#[plugin_registrar]` on functions.
|
||||
(removed, plugin_registrar, "1.54.0", Some(29597), None,
|
||||
(removed, plugin_registrar, "1.54.0", Some(29597),
|
||||
Some("plugins are no longer supported")),
|
||||
/// Allows exhaustive integer pattern matching with `usize::MAX`/`isize::MIN`/`isize::MAX`.
|
||||
(removed, precise_pointer_size_matching, "1.32.0", Some(56354), None,
|
||||
(removed, precise_pointer_size_matching, "1.32.0", Some(56354),
|
||||
Some("removed in favor of half-open ranges")),
|
||||
(removed, proc_macro_expr, "1.27.0", Some(54727), None,
|
||||
(removed, proc_macro_expr, "1.27.0", Some(54727),
|
||||
Some("subsumed by `#![feature(proc_macro_hygiene)]`")),
|
||||
(removed, proc_macro_gen, "1.27.0", Some(54727), None,
|
||||
(removed, proc_macro_gen, "1.27.0", Some(54727),
|
||||
Some("subsumed by `#![feature(proc_macro_hygiene)]`")),
|
||||
(removed, proc_macro_mod, "1.27.0", Some(54727), None,
|
||||
(removed, proc_macro_mod, "1.27.0", Some(54727),
|
||||
Some("subsumed by `#![feature(proc_macro_hygiene)]`")),
|
||||
(removed, proc_macro_non_items, "1.27.0", Some(54727), None,
|
||||
(removed, proc_macro_non_items, "1.27.0", Some(54727),
|
||||
Some("subsumed by `#![feature(proc_macro_hygiene)]`")),
|
||||
(removed, pub_macro_rules, "1.53.0", Some(78855), None,
|
||||
(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, None),
|
||||
(removed, quad_precision_float, "1.0.0", None, None, None),
|
||||
(removed, quote, "1.33.0", Some(29601), None, None),
|
||||
(removed, reflect, "1.0.0", Some(27749), None, None),
|
||||
(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, reflect, "1.0.0", Some(27749), None),
|
||||
/// Allows using the `#[register_attr]` attribute.
|
||||
(removed, register_attr, "1.65.0", Some(66080), None,
|
||||
(removed, register_attr, "1.65.0", Some(66080),
|
||||
Some("removed in favor of `#![register_tool]`")),
|
||||
(removed, rust_2018_preview, "CURRENT_RUSTC_VERSION", 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, None),
|
||||
(removed, rustc_diagnostic_macros, "1.38.0", None, None),
|
||||
/// Allows identifying crates that contain sanitizer runtimes.
|
||||
(removed, sanitizer_runtime, "1.17.0", None, None, None),
|
||||
(removed, simd, "1.0.0", Some(27731), None,
|
||||
(removed, sanitizer_runtime, "1.17.0", None, None),
|
||||
(removed, simd, "1.0.0", Some(27731),
|
||||
Some("removed in favor of `#[repr(simd)]`")),
|
||||
/// Allows `#[link(kind = "static-nobundle", ...)]`.
|
||||
(removed, static_nobundle, "1.16.0", Some(37403), None,
|
||||
(removed, static_nobundle, "1.16.0", Some(37403),
|
||||
Some(r#"subsumed by `#[link(kind = "static", modifiers = "-bundle", ...)]`"#)),
|
||||
(removed, struct_inherit, "1.0.0", None, None, None),
|
||||
(removed, test_removed_feature, "1.0.0", None, None, None),
|
||||
(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, None),
|
||||
(removed, unsafe_no_drop_flag, "1.0.0", None, None, None),
|
||||
(removed, unmarked_api, "1.0.0", None, None),
|
||||
(removed, unsafe_no_drop_flag, "1.0.0", None, None),
|
||||
/// Allows `union` fields that don't implement `Copy` as long as they don't have any drop glue.
|
||||
(removed, untagged_unions, "1.13.0", Some(55149), None,
|
||||
(removed, untagged_unions, "1.13.0", Some(55149),
|
||||
Some("unions with `Copy` and `ManuallyDrop` fields are stable; there is no intent to stabilize more")),
|
||||
/// Allows `#[unwind(..)]`.
|
||||
///
|
||||
/// Permits specifying whether a function should permit unwinding or abort on unwind.
|
||||
(removed, unwind_attributes, "1.56.0", Some(58760), None, Some("use the C-unwind ABI instead")),
|
||||
(removed, visible_private_types, "1.0.0", None, None, None),
|
||||
(removed, unwind_attributes, "1.56.0", Some(58760), Some("use the C-unwind ABI instead")),
|
||||
(removed, visible_private_types, "1.0.0", None, None),
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
// Features are listed in alphabetical order. Tidy will fail if you don't keep it this way.
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
|
@ -3,7 +3,6 @@
|
||||
use super::{to_nonzero, Feature};
|
||||
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_span::edition::Edition;
|
||||
use rustc_span::symbol::{sym, Symbol};
|
||||
use rustc_span::Span;
|
||||
|
||||
@ -33,7 +32,7 @@ macro_rules! status_to_enum {
|
||||
|
||||
macro_rules! declare_features {
|
||||
($(
|
||||
$(#[doc = $doc:tt])* ($status:ident, $feature:ident, $ver:expr, $issue:expr, $edition:expr),
|
||||
$(#[doc = $doc:tt])* ($status:ident, $feature:ident, $ver:expr, $issue:expr),
|
||||
)+) => {
|
||||
/// Unstable language features that are being implemented or being
|
||||
/// considered for acceptance (stabilization) or removal.
|
||||
@ -43,7 +42,6 @@ macro_rules! declare_features {
|
||||
name: sym::$feature,
|
||||
since: $ver,
|
||||
issue: to_nonzero($issue),
|
||||
edition: $edition,
|
||||
},
|
||||
// Sets this feature's corresponding bool within `features`.
|
||||
set_enabled: |features| features.$feature = true,
|
||||
@ -102,8 +100,7 @@ macro_rules! declare_features {
|
||||
self.declared_features.contains(&feature)
|
||||
}
|
||||
|
||||
/// Is the given feature active, i.e. declared or automatically
|
||||
/// enabled due to the edition?
|
||||
/// Is the given feature active (enabled by the user)?
|
||||
///
|
||||
/// Panics if the symbol doesn't correspond to a declared feature.
|
||||
pub fn active(&self, feature: Symbol) -> bool {
|
||||
@ -179,58 +176,56 @@ declare_features! (
|
||||
// no-tracking-issue-start
|
||||
|
||||
/// Allows using the `unadjusted` ABI; perma-unstable.
|
||||
(internal, abi_unadjusted, "1.16.0", None, None),
|
||||
(internal, abi_unadjusted, "1.16.0", None),
|
||||
/// Allows using the `vectorcall` ABI.
|
||||
(unstable, abi_vectorcall, "1.7.0", None, None),
|
||||
(unstable, abi_vectorcall, "1.7.0", None),
|
||||
/// Allows using `#![needs_allocator]`, an implementation detail of `#[global_allocator]`.
|
||||
(internal, allocator_internals, "1.20.0", None, None),
|
||||
(internal, allocator_internals, "1.20.0", None),
|
||||
/// Allows using `#[allow_internal_unsafe]`. This is an
|
||||
/// attribute on `macro_rules!` and can't use the attribute handling
|
||||
/// below (it has to be checked before expansion possibly makes
|
||||
/// macros disappear).
|
||||
(internal, allow_internal_unsafe, "1.0.0", None, None),
|
||||
(internal, allow_internal_unsafe, "1.0.0", None),
|
||||
/// Allows using `#[allow_internal_unstable]`. This is an
|
||||
/// attribute on `macro_rules!` and can't use the attribute handling
|
||||
/// below (it has to be checked before expansion possibly makes
|
||||
/// macros disappear).
|
||||
(internal, allow_internal_unstable, "1.0.0", None, None),
|
||||
(internal, allow_internal_unstable, "1.0.0", None),
|
||||
/// Allows using anonymous lifetimes in argument-position impl-trait.
|
||||
(unstable, anonymous_lifetime_in_impl_trait, "1.63.0", None, None),
|
||||
(unstable, anonymous_lifetime_in_impl_trait, "1.63.0", None),
|
||||
/// Allows identifying the `compiler_builtins` crate.
|
||||
(internal, compiler_builtins, "1.13.0", None, None),
|
||||
(internal, compiler_builtins, "1.13.0", None),
|
||||
/// Allows writing custom MIR
|
||||
(internal, custom_mir, "1.65.0", None, None),
|
||||
(internal, custom_mir, "1.65.0", None),
|
||||
/// Outputs useful `assert!` messages
|
||||
(unstable, generic_assert, "1.63.0", None, None),
|
||||
(unstable, generic_assert, "1.63.0", None),
|
||||
/// Allows using the `rust-intrinsic`'s "ABI".
|
||||
(internal, intrinsics, "1.0.0", None, None),
|
||||
(internal, intrinsics, "1.0.0", None),
|
||||
/// Allows using `#[lang = ".."]` attribute for linking items to special compiler logic.
|
||||
(internal, lang_items, "1.0.0", None, None),
|
||||
(internal, lang_items, "1.0.0", None),
|
||||
/// Changes `impl Trait` to capture all lifetimes in scope.
|
||||
(unstable, lifetime_capture_rules_2024, "CURRENT_RUSTC_VERSION", None, None),
|
||||
(unstable, lifetime_capture_rules_2024, "CURRENT_RUSTC_VERSION", None),
|
||||
/// Allows `#[link(..., cfg(..))]`; perma-unstable per #37406
|
||||
(unstable, link_cfg, "1.14.0", None, None),
|
||||
(unstable, link_cfg, "1.14.0", None),
|
||||
/// Allows the `multiple_supertrait_upcastable` lint.
|
||||
(unstable, multiple_supertrait_upcastable, "1.69.0", None, None),
|
||||
(unstable, multiple_supertrait_upcastable, "1.69.0", None),
|
||||
/// Allow negative trait bounds. This is an internal-only feature for testing the trait solver!
|
||||
(incomplete, negative_bounds, "1.71.0", None, None),
|
||||
(incomplete, negative_bounds, "1.71.0", None),
|
||||
/// Allows using `#[omit_gdb_pretty_printer_section]`.
|
||||
(internal, omit_gdb_pretty_printer_section, "1.5.0", None, None),
|
||||
(internal, omit_gdb_pretty_printer_section, "1.5.0", None),
|
||||
/// Allows using `#[prelude_import]` on glob `use` items.
|
||||
(internal, prelude_import, "1.2.0", None, None),
|
||||
(internal, prelude_import, "1.2.0", None),
|
||||
/// Used to identify crates that contain the profiler runtime.
|
||||
(internal, profiler_runtime, "1.18.0", None, None),
|
||||
(internal, profiler_runtime, "1.18.0", None),
|
||||
/// Allows using `rustc_*` attributes (RFC 572).
|
||||
(internal, rustc_attrs, "1.0.0", None, None),
|
||||
(internal, rustc_attrs, "1.0.0", None),
|
||||
/// Allows using the `#[stable]` and `#[unstable]` attributes.
|
||||
(internal, staged_api, "1.0.0", None, None),
|
||||
/// Added for testing E0705; perma-unstable.
|
||||
(internal, test_2018_feature, "1.31.0", None, Some(Edition::Edition2018)),
|
||||
(internal, staged_api, "1.0.0", None),
|
||||
/// Added for testing unstable lints; perma-unstable.
|
||||
(internal, test_unstable_lint, "1.60.0", None, None),
|
||||
(internal, test_unstable_lint, "1.60.0", None),
|
||||
/// Use for stable + negative coherence and strict coherence depending on trait's
|
||||
/// rustc_strict_coherence value.
|
||||
(unstable, with_negative_coherence, "1.60.0", None, None),
|
||||
(unstable, with_negative_coherence, "1.60.0", None),
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
// Features are listed in alphabetical order. Tidy will fail if you don't keep it this way.
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
@ -246,44 +241,44 @@ declare_features! (
|
||||
|
||||
/// Allows features specific to auto traits.
|
||||
/// Renamed from `optin_builtin_traits`.
|
||||
(unstable, auto_traits, "1.50.0", Some(13231), None),
|
||||
(unstable, auto_traits, "1.50.0", Some(13231)),
|
||||
/// Allows using `box` in patterns (RFC 469).
|
||||
(unstable, box_patterns, "1.0.0", Some(29641), None),
|
||||
(unstable, box_patterns, "1.0.0", Some(29641)),
|
||||
/// Allows `#[doc(notable_trait)]`.
|
||||
/// Renamed from `doc_spotlight`.
|
||||
(unstable, doc_notable_trait, "1.52.0", Some(45040), None),
|
||||
(unstable, doc_notable_trait, "1.52.0", Some(45040)),
|
||||
/// Allows using the `may_dangle` attribute (RFC 1327).
|
||||
(unstable, dropck_eyepatch, "1.10.0", Some(34761), None),
|
||||
(unstable, dropck_eyepatch, "1.10.0", Some(34761)),
|
||||
/// Allows using the `#[fundamental]` attribute.
|
||||
(unstable, fundamental, "1.0.0", Some(29635), None),
|
||||
(unstable, fundamental, "1.0.0", Some(29635)),
|
||||
/// Allows using `#[link_name="llvm.*"]`.
|
||||
(internal, link_llvm_intrinsics, "1.0.0", Some(29602), None),
|
||||
(internal, link_llvm_intrinsics, "1.0.0", Some(29602)),
|
||||
/// Allows using the `#[linkage = ".."]` attribute.
|
||||
(unstable, linkage, "1.0.0", Some(29603), None),
|
||||
(unstable, linkage, "1.0.0", Some(29603)),
|
||||
/// Allows declaring with `#![needs_panic_runtime]` that a panic runtime is needed.
|
||||
(internal, needs_panic_runtime, "1.10.0", Some(32837), None),
|
||||
(internal, needs_panic_runtime, "1.10.0", Some(32837)),
|
||||
/// Allows using the `#![panic_runtime]` attribute.
|
||||
(internal, panic_runtime, "1.10.0", Some(32837), None),
|
||||
(internal, panic_runtime, "1.10.0", Some(32837)),
|
||||
/// Allows `extern "platform-intrinsic" { ... }`.
|
||||
(internal, platform_intrinsics, "1.4.0", Some(27731), None),
|
||||
(internal, platform_intrinsics, "1.4.0", Some(27731)),
|
||||
/// Allows using `#[rustc_allow_const_fn_unstable]`.
|
||||
/// This is an attribute on `const fn` for the same
|
||||
/// purpose as `#[allow_internal_unstable]`.
|
||||
(internal, rustc_allow_const_fn_unstable, "1.49.0", Some(69399), None),
|
||||
(internal, rustc_allow_const_fn_unstable, "1.49.0", Some(69399)),
|
||||
/// Allows using compiler's own crates.
|
||||
(unstable, rustc_private, "1.0.0", Some(27812), None),
|
||||
(unstable, rustc_private, "1.0.0", Some(27812)),
|
||||
/// Allows using internal rustdoc features like `doc(keyword)`.
|
||||
(internal, rustdoc_internals, "1.58.0", Some(90418), None),
|
||||
(internal, rustdoc_internals, "1.58.0", Some(90418)),
|
||||
/// Allows using the `rustdoc::missing_doc_code_examples` lint
|
||||
(unstable, rustdoc_missing_doc_code_examples, "1.31.0", Some(101730), None),
|
||||
(unstable, rustdoc_missing_doc_code_examples, "1.31.0", Some(101730)),
|
||||
/// Allows using `#[start]` on a function indicating that it is the program entrypoint.
|
||||
(unstable, start, "1.0.0", Some(29633), None),
|
||||
(unstable, start, "1.0.0", Some(29633)),
|
||||
/// Allows using `#[structural_match]` which indicates that a type is structurally matchable.
|
||||
/// FIXME: Subsumed by trait `StructuralPartialEq`, cannot move to removed until a library
|
||||
/// feature with the same name exists.
|
||||
(unstable, structural_match, "1.8.0", Some(31434), None),
|
||||
(unstable, structural_match, "1.8.0", Some(31434)),
|
||||
/// Allows using the `rust-call` ABI.
|
||||
(unstable, unboxed_closures, "1.0.0", Some(29625), None),
|
||||
(unstable, unboxed_closures, "1.0.0", Some(29625)),
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
// Features are listed in alphabetical order. Tidy will fail if you don't keep it this way.
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
@ -299,21 +294,21 @@ declare_features! (
|
||||
// FIXME: Document these and merge with the list below.
|
||||
|
||||
// Unstable `#[target_feature]` directives.
|
||||
(unstable, aarch64_ver_target_feature, "1.27.0", Some(44839), None),
|
||||
(unstable, arm_target_feature, "1.27.0", Some(44839), None),
|
||||
(unstable, avx512_target_feature, "1.27.0", Some(44839), None),
|
||||
(unstable, bpf_target_feature, "1.54.0", Some(44839), None),
|
||||
(unstable, csky_target_feature, "1.73.0", Some(44839), None),
|
||||
(unstable, ermsb_target_feature, "1.49.0", Some(44839), None),
|
||||
(unstable, hexagon_target_feature, "1.27.0", Some(44839), None),
|
||||
(unstable, loongarch_target_feature, "1.73.0", Some(44839), None),
|
||||
(unstable, mips_target_feature, "1.27.0", Some(44839), None),
|
||||
(unstable, powerpc_target_feature, "1.27.0", Some(44839), None),
|
||||
(unstable, riscv_target_feature, "1.45.0", Some(44839), None),
|
||||
(unstable, rtm_target_feature, "1.35.0", Some(44839), None),
|
||||
(unstable, sse4a_target_feature, "1.27.0", Some(44839), None),
|
||||
(unstable, tbm_target_feature, "1.27.0", Some(44839), None),
|
||||
(unstable, wasm_target_feature, "1.30.0", Some(44839), None),
|
||||
(unstable, aarch64_ver_target_feature, "1.27.0", Some(44839)),
|
||||
(unstable, arm_target_feature, "1.27.0", Some(44839)),
|
||||
(unstable, avx512_target_feature, "1.27.0", Some(44839)),
|
||||
(unstable, bpf_target_feature, "1.54.0", Some(44839)),
|
||||
(unstable, csky_target_feature, "1.73.0", Some(44839)),
|
||||
(unstable, ermsb_target_feature, "1.49.0", Some(44839)),
|
||||
(unstable, hexagon_target_feature, "1.27.0", Some(44839)),
|
||||
(unstable, loongarch_target_feature, "1.73.0", Some(44839)),
|
||||
(unstable, mips_target_feature, "1.27.0", Some(44839)),
|
||||
(unstable, powerpc_target_feature, "1.27.0", Some(44839)),
|
||||
(unstable, riscv_target_feature, "1.45.0", Some(44839)),
|
||||
(unstable, rtm_target_feature, "1.35.0", Some(44839)),
|
||||
(unstable, sse4a_target_feature, "1.27.0", Some(44839)),
|
||||
(unstable, tbm_target_feature, "1.27.0", Some(44839)),
|
||||
(unstable, wasm_target_feature, "1.30.0", Some(44839)),
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
// Features are listed in alphabetical order. Tidy will fail if you don't keep it this way.
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
@ -327,295 +322,295 @@ declare_features! (
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
/// Allows using the `amdgpu-kernel` ABI.
|
||||
(unstable, abi_amdgpu_kernel, "1.29.0", Some(51575), None),
|
||||
(unstable, abi_amdgpu_kernel, "1.29.0", Some(51575)),
|
||||
/// Allows `extern "avr-interrupt" fn()` and `extern "avr-non-blocking-interrupt" fn()`.
|
||||
(unstable, abi_avr_interrupt, "1.45.0", Some(69664), None),
|
||||
(unstable, abi_avr_interrupt, "1.45.0", Some(69664)),
|
||||
/// Allows `extern "C-cmse-nonsecure-call" fn()`.
|
||||
(unstable, abi_c_cmse_nonsecure_call, "1.51.0", Some(81391), None),
|
||||
(unstable, abi_c_cmse_nonsecure_call, "1.51.0", Some(81391)),
|
||||
/// Allows `extern "msp430-interrupt" fn()`.
|
||||
(unstable, abi_msp430_interrupt, "1.16.0", Some(38487), None),
|
||||
(unstable, abi_msp430_interrupt, "1.16.0", Some(38487)),
|
||||
/// Allows `extern "ptx-*" fn()`.
|
||||
(unstable, abi_ptx, "1.15.0", Some(38788), None),
|
||||
(unstable, abi_ptx, "1.15.0", Some(38788)),
|
||||
/// Allows `extern "riscv-interrupt-m" fn()` and `extern "riscv-interrupt-s" fn()`.
|
||||
(unstable, abi_riscv_interrupt, "1.73.0", Some(111889), None),
|
||||
(unstable, abi_riscv_interrupt, "1.73.0", Some(111889)),
|
||||
/// Allows `extern "x86-interrupt" fn()`.
|
||||
(unstable, abi_x86_interrupt, "1.17.0", Some(40180), None),
|
||||
(unstable, abi_x86_interrupt, "1.17.0", Some(40180)),
|
||||
/// Allows additional const parameter types, such as `&'static str` or user defined types
|
||||
(incomplete, adt_const_params, "1.56.0", Some(95174), None),
|
||||
(incomplete, adt_const_params, "1.56.0", Some(95174)),
|
||||
/// Allows defining an `#[alloc_error_handler]`.
|
||||
(unstable, alloc_error_handler, "1.29.0", Some(51540), None),
|
||||
(unstable, alloc_error_handler, "1.29.0", Some(51540)),
|
||||
/// Allows trait methods with arbitrary self types.
|
||||
(unstable, arbitrary_self_types, "1.23.0", Some(44874), None),
|
||||
(unstable, arbitrary_self_types, "1.23.0", Some(44874)),
|
||||
/// Allows using `const` operands in inline assembly.
|
||||
(unstable, asm_const, "1.58.0", Some(93332), None),
|
||||
(unstable, asm_const, "1.58.0", Some(93332)),
|
||||
/// Enables experimental inline assembly support for additional architectures.
|
||||
(unstable, asm_experimental_arch, "1.58.0", Some(93335), None),
|
||||
(unstable, asm_experimental_arch, "1.58.0", Some(93335)),
|
||||
/// Allows the `may_unwind` option in inline assembly.
|
||||
(unstable, asm_unwind, "1.58.0", Some(93334), None),
|
||||
(unstable, asm_unwind, "1.58.0", Some(93334)),
|
||||
/// Allows users to enforce equality of associated constants `TraitImpl<AssocConst=3>`.
|
||||
(unstable, associated_const_equality, "1.58.0", Some(92827), None),
|
||||
(unstable, associated_const_equality, "1.58.0", Some(92827)),
|
||||
/// Allows the user of associated type bounds.
|
||||
(unstable, associated_type_bounds, "1.34.0", Some(52662), None),
|
||||
(unstable, associated_type_bounds, "1.34.0", Some(52662)),
|
||||
/// Allows associated type defaults.
|
||||
(unstable, associated_type_defaults, "1.2.0", Some(29661), None),
|
||||
(unstable, associated_type_defaults, "1.2.0", Some(29661)),
|
||||
/// Allows `async || body` closures.
|
||||
(unstable, async_closure, "1.37.0", Some(62290), None),
|
||||
(unstable, async_closure, "1.37.0", Some(62290)),
|
||||
/// Allows `#[track_caller]` on async functions.
|
||||
(unstable, async_fn_track_caller, "1.73.0", Some(110011), None),
|
||||
(unstable, async_fn_track_caller, "1.73.0", Some(110011)),
|
||||
/// Allows builtin # foo() syntax
|
||||
(unstable, builtin_syntax, "1.71.0", Some(110680), None),
|
||||
(unstable, builtin_syntax, "1.71.0", Some(110680)),
|
||||
/// Treat `extern "C"` function as nounwind.
|
||||
(unstable, c_unwind, "1.52.0", Some(74990), None),
|
||||
(unstable, c_unwind, "1.52.0", Some(74990)),
|
||||
/// Allows using C-variadics.
|
||||
(unstable, c_variadic, "1.34.0", Some(44930), None),
|
||||
(unstable, c_variadic, "1.34.0", Some(44930)),
|
||||
/// Allows the use of `#[cfg(overflow_checks)` to check if integer overflow behaviour.
|
||||
(unstable, cfg_overflow_checks, "1.71.0", Some(111466), None),
|
||||
(unstable, cfg_overflow_checks, "1.71.0", Some(111466)),
|
||||
/// Provides the relocation model information as cfg entry
|
||||
(unstable, cfg_relocation_model, "1.73.0", Some(114929), None),
|
||||
(unstable, cfg_relocation_model, "1.73.0", Some(114929)),
|
||||
/// Allows the use of `#[cfg(sanitize = "option")]`; set when -Zsanitizer is used.
|
||||
(unstable, cfg_sanitize, "1.41.0", Some(39699), None),
|
||||
(unstable, cfg_sanitize, "1.41.0", Some(39699)),
|
||||
/// Allows `cfg(target_abi = "...")`.
|
||||
(unstable, cfg_target_abi, "1.55.0", Some(80970), None),
|
||||
(unstable, cfg_target_abi, "1.55.0", Some(80970)),
|
||||
/// Allows `cfg(target(abi = "..."))`.
|
||||
(unstable, cfg_target_compact, "1.63.0", Some(96901), None),
|
||||
(unstable, cfg_target_compact, "1.63.0", Some(96901)),
|
||||
/// Allows `cfg(target_has_atomic_load_store = "...")`.
|
||||
(unstable, cfg_target_has_atomic, "1.60.0", Some(94039), None),
|
||||
(unstable, cfg_target_has_atomic, "1.60.0", Some(94039)),
|
||||
/// Allows `cfg(target_has_atomic_equal_alignment = "...")`.
|
||||
(unstable, cfg_target_has_atomic_equal_alignment, "1.60.0", Some(93822), None),
|
||||
(unstable, cfg_target_has_atomic_equal_alignment, "1.60.0", Some(93822)),
|
||||
/// Allows `cfg(target_thread_local)`.
|
||||
(unstable, cfg_target_thread_local, "1.7.0", Some(29594), None),
|
||||
(unstable, cfg_target_thread_local, "1.7.0", Some(29594)),
|
||||
/// Allow conditional compilation depending on rust version
|
||||
(unstable, cfg_version, "1.45.0", Some(64796), None),
|
||||
(unstable, cfg_version, "1.45.0", Some(64796)),
|
||||
/// Allows to use the `#[cfi_encoding = ""]` attribute.
|
||||
(unstable, cfi_encoding, "1.71.0", Some(89653), None),
|
||||
(unstable, cfi_encoding, "1.71.0", Some(89653)),
|
||||
/// Allows `for<...>` on closures and coroutines.
|
||||
(unstable, closure_lifetime_binder, "1.64.0", Some(97362), None),
|
||||
(unstable, closure_lifetime_binder, "1.64.0", Some(97362)),
|
||||
/// Allows `#[track_caller]` on closures and coroutines.
|
||||
(unstable, closure_track_caller, "1.57.0", Some(87417), None),
|
||||
(unstable, closure_track_caller, "1.57.0", Some(87417)),
|
||||
/// Allows to use the `#[cmse_nonsecure_entry]` attribute.
|
||||
(unstable, cmse_nonsecure_entry, "1.48.0", Some(75835), None),
|
||||
(unstable, cmse_nonsecure_entry, "1.48.0", Some(75835)),
|
||||
/// Allows use of the `#[collapse_debuginfo]` attribute.
|
||||
(unstable, collapse_debuginfo, "1.65.0", Some(100758), None),
|
||||
(unstable, collapse_debuginfo, "1.65.0", Some(100758)),
|
||||
/// Allows `async {}` expressions in const contexts.
|
||||
(unstable, const_async_blocks, "1.53.0", Some(85368), None),
|
||||
(unstable, const_async_blocks, "1.53.0", Some(85368)),
|
||||
/// Allows `const || {}` closures in const contexts.
|
||||
(incomplete, const_closures, "1.68.0", Some(106003), None),
|
||||
(incomplete, const_closures, "1.68.0", Some(106003)),
|
||||
/// Allows the definition of `const extern fn` and `const unsafe extern fn`.
|
||||
(unstable, const_extern_fn, "1.40.0", Some(64926), None),
|
||||
(unstable, const_extern_fn, "1.40.0", Some(64926)),
|
||||
/// Allows basic arithmetic on floating point types in a `const fn`.
|
||||
(unstable, const_fn_floating_point_arithmetic, "1.48.0", Some(57241), None),
|
||||
(unstable, const_fn_floating_point_arithmetic, "1.48.0", Some(57241)),
|
||||
/// Allows `for _ in _` loops in const contexts.
|
||||
(unstable, const_for, "1.56.0", Some(87575), None),
|
||||
(unstable, const_for, "1.56.0", Some(87575)),
|
||||
/// Allows using `&mut` in constant functions.
|
||||
(unstable, const_mut_refs, "1.41.0", Some(57349), None),
|
||||
(unstable, const_mut_refs, "1.41.0", Some(57349)),
|
||||
/// Be more precise when looking for live drops in a const context.
|
||||
(unstable, const_precise_live_drops, "1.46.0", Some(73255), None),
|
||||
(unstable, const_precise_live_drops, "1.46.0", Some(73255)),
|
||||
/// Allows references to types with interior mutability within constants
|
||||
(unstable, const_refs_to_cell, "1.51.0", Some(80384), None),
|
||||
(unstable, const_refs_to_cell, "1.51.0", Some(80384)),
|
||||
/// Allows `impl const Trait for T` syntax.
|
||||
(unstable, const_trait_impl, "1.42.0", Some(67792), None),
|
||||
(unstable, const_trait_impl, "1.42.0", Some(67792)),
|
||||
/// Allows the `?` operator in const contexts.
|
||||
(unstable, const_try, "1.56.0", Some(74935), None),
|
||||
(unstable, const_try, "1.56.0", Some(74935)),
|
||||
/// Allows coroutines to be cloned.
|
||||
(unstable, coroutine_clone, "1.65.0", Some(95360), None),
|
||||
(unstable, coroutine_clone, "1.65.0", Some(95360)),
|
||||
/// Allows defining coroutines.
|
||||
(unstable, coroutines, "1.21.0", Some(43122), None),
|
||||
(unstable, coroutines, "1.21.0", Some(43122)),
|
||||
/// Allows function attribute `#[coverage(on/off)]`, to control coverage
|
||||
/// instrumentation of that function.
|
||||
(unstable, coverage_attribute, "1.74.0", Some(84605), None),
|
||||
(unstable, coverage_attribute, "1.74.0", Some(84605)),
|
||||
/// Allows users to provide classes for fenced code block using `class:classname`.
|
||||
(unstable, custom_code_classes_in_docs, "1.74.0", Some(79483), None),
|
||||
(unstable, custom_code_classes_in_docs, "1.74.0", Some(79483)),
|
||||
/// Allows non-builtin attributes in inner attribute position.
|
||||
(unstable, custom_inner_attributes, "1.30.0", Some(54726), None),
|
||||
(unstable, custom_inner_attributes, "1.30.0", Some(54726)),
|
||||
/// Allows custom test frameworks with `#![test_runner]` and `#[test_case]`.
|
||||
(unstable, custom_test_frameworks, "1.30.0", Some(50297), None),
|
||||
(unstable, custom_test_frameworks, "1.30.0", Some(50297)),
|
||||
/// Allows declarative macros 2.0 (`macro`).
|
||||
(unstable, decl_macro, "1.17.0", Some(39412), None),
|
||||
(unstable, decl_macro, "1.17.0", Some(39412)),
|
||||
/// Allows default type parameters to influence type inference.
|
||||
(unstable, default_type_parameter_fallback, "1.3.0", Some(27336), None),
|
||||
(unstable, default_type_parameter_fallback, "1.3.0", Some(27336)),
|
||||
/// Allows using `#[deprecated_safe]` to deprecate the safeness of a function or trait
|
||||
(unstable, deprecated_safe, "1.61.0", Some(94978), None),
|
||||
(unstable, deprecated_safe, "1.61.0", Some(94978)),
|
||||
/// Allows having using `suggestion` in the `#[deprecated]` attribute.
|
||||
(unstable, deprecated_suggestion, "1.61.0", Some(94785), None),
|
||||
(unstable, deprecated_suggestion, "1.61.0", Some(94785)),
|
||||
/// Allows using the `#[diagnostic]` attribute tool namespace
|
||||
(unstable, diagnostic_namespace, "1.73.0", Some(111996), None),
|
||||
(unstable, diagnostic_namespace, "1.73.0", Some(111996)),
|
||||
/// Controls errors in trait implementations.
|
||||
(unstable, do_not_recommend, "1.67.0", Some(51992), None),
|
||||
(unstable, do_not_recommend, "1.67.0", Some(51992)),
|
||||
/// Tells rustdoc to automatically generate `#[doc(cfg(...))]`.
|
||||
(unstable, doc_auto_cfg, "1.58.0", Some(43781), None),
|
||||
(unstable, doc_auto_cfg, "1.58.0", Some(43781)),
|
||||
/// Allows `#[doc(cfg(...))]`.
|
||||
(unstable, doc_cfg, "1.21.0", Some(43781), None),
|
||||
(unstable, doc_cfg, "1.21.0", Some(43781)),
|
||||
/// Allows `#[doc(cfg_hide(...))]`.
|
||||
(unstable, doc_cfg_hide, "1.57.0", Some(43781), None),
|
||||
(unstable, doc_cfg_hide, "1.57.0", Some(43781)),
|
||||
/// Allows `#[doc(masked)]`.
|
||||
(unstable, doc_masked, "1.21.0", Some(44027), None),
|
||||
(unstable, doc_masked, "1.21.0", Some(44027)),
|
||||
/// Allows `dyn* Trait` objects.
|
||||
(incomplete, dyn_star, "1.65.0", Some(102425), None),
|
||||
(incomplete, dyn_star, "1.65.0", Some(102425)),
|
||||
// Uses generic effect parameters for ~const bounds
|
||||
(unstable, effects, "1.72.0", Some(102090), None),
|
||||
(unstable, effects, "1.72.0", Some(102090)),
|
||||
/// Allows `X..Y` patterns.
|
||||
(unstable, exclusive_range_pattern, "1.11.0", Some(37854), None),
|
||||
(unstable, exclusive_range_pattern, "1.11.0", Some(37854)),
|
||||
/// Allows exhaustive pattern matching on types that contain uninhabited types.
|
||||
(unstable, exhaustive_patterns, "1.13.0", Some(51085), None),
|
||||
(unstable, exhaustive_patterns, "1.13.0", Some(51085)),
|
||||
/// Allows explicit tail calls via `become` expression.
|
||||
(incomplete, explicit_tail_calls, "1.72.0", Some(112788), None),
|
||||
(incomplete, explicit_tail_calls, "1.72.0", Some(112788)),
|
||||
/// Allows using `efiapi`, `sysv64` and `win64` as calling convention
|
||||
/// for functions with varargs.
|
||||
(unstable, extended_varargs_abi_support, "1.65.0", Some(100189), None),
|
||||
(unstable, extended_varargs_abi_support, "1.65.0", Some(100189)),
|
||||
/// Allows defining `extern type`s.
|
||||
(unstable, extern_types, "1.23.0", Some(43467), None),
|
||||
(unstable, extern_types, "1.23.0", Some(43467)),
|
||||
/// Allows the use of `#[ffi_const]` on foreign functions.
|
||||
(unstable, ffi_const, "1.45.0", Some(58328), None),
|
||||
(unstable, ffi_const, "1.45.0", Some(58328)),
|
||||
/// Allows the use of `#[ffi_pure]` on foreign functions.
|
||||
(unstable, ffi_pure, "1.45.0", Some(58329), None),
|
||||
(unstable, ffi_pure, "1.45.0", Some(58329)),
|
||||
/// Allows using `#[ffi_returns_twice]` on foreign functions.
|
||||
(unstable, ffi_returns_twice, "1.34.0", Some(58314), None),
|
||||
(unstable, ffi_returns_twice, "1.34.0", Some(58314)),
|
||||
/// Allows using `#[repr(align(...))]` on function items
|
||||
(unstable, fn_align, "1.53.0", Some(82232), None),
|
||||
(unstable, fn_align, "1.53.0", Some(82232)),
|
||||
/// Support delegating implementation of functions to other already implemented functions.
|
||||
(incomplete, fn_delegation, "CURRENT_RUSTC_VERSION", Some(118212), None),
|
||||
(incomplete, fn_delegation, "CURRENT_RUSTC_VERSION", Some(118212)),
|
||||
/// Allows defining gen blocks and `gen fn`.
|
||||
(unstable, gen_blocks, "1.75.0", Some(117078), None),
|
||||
(unstable, gen_blocks, "1.75.0", Some(117078)),
|
||||
/// Infer generic args for both consts and types.
|
||||
(unstable, generic_arg_infer, "1.55.0", Some(85077), None),
|
||||
(unstable, generic_arg_infer, "1.55.0", Some(85077)),
|
||||
/// An extension to the `generic_associated_types` feature, allowing incomplete features.
|
||||
(incomplete, generic_associated_types_extended, "1.61.0", Some(95451), None),
|
||||
(incomplete, generic_associated_types_extended, "1.61.0", Some(95451)),
|
||||
/// Allows non-trivial generic constants which have to have wfness manually propagated to callers
|
||||
(incomplete, generic_const_exprs, "1.56.0", Some(76560), None),
|
||||
(incomplete, generic_const_exprs, "1.56.0", Some(76560)),
|
||||
/// Allows generic parameters and where-clauses on free & associated const items.
|
||||
(incomplete, generic_const_items, "1.73.0", Some(113521), None),
|
||||
(incomplete, generic_const_items, "1.73.0", Some(113521)),
|
||||
/// Allows using `..=X` as a patterns in slices.
|
||||
(unstable, half_open_range_patterns_in_slices, "1.66.0", Some(67264), None),
|
||||
(unstable, half_open_range_patterns_in_slices, "1.66.0", Some(67264)),
|
||||
/// Allows `if let` guard in match arms.
|
||||
(unstable, if_let_guard, "1.47.0", Some(51114), None),
|
||||
(unstable, if_let_guard, "1.47.0", Some(51114)),
|
||||
/// Allows `impl Trait` to be used inside associated types (RFC 2515).
|
||||
(unstable, impl_trait_in_assoc_type, "1.70.0", Some(63063), None),
|
||||
(unstable, impl_trait_in_assoc_type, "1.70.0", Some(63063)),
|
||||
/// Allows `impl Trait` as output type in `Fn` traits in return position of functions.
|
||||
(unstable, impl_trait_in_fn_trait_return, "1.64.0", Some(99697), None),
|
||||
(unstable, impl_trait_in_fn_trait_return, "1.64.0", Some(99697)),
|
||||
/// Allows using imported `main` function
|
||||
(unstable, imported_main, "1.53.0", Some(28937), None),
|
||||
(unstable, imported_main, "1.53.0", Some(28937)),
|
||||
/// Allows associated types in inherent impls.
|
||||
(incomplete, inherent_associated_types, "1.52.0", Some(8995), None),
|
||||
(incomplete, inherent_associated_types, "1.52.0", Some(8995)),
|
||||
/// Allow anonymous constants from an inline `const` block
|
||||
(unstable, inline_const, "1.49.0", Some(76001), None),
|
||||
(unstable, inline_const, "1.49.0", Some(76001)),
|
||||
/// Allow anonymous constants from an inline `const` block in pattern position
|
||||
(incomplete, inline_const_pat, "1.58.0", Some(76001), None),
|
||||
(incomplete, inline_const_pat, "1.58.0", Some(76001)),
|
||||
/// Allows using `pointer` and `reference` in intra-doc links
|
||||
(unstable, intra_doc_pointers, "1.51.0", Some(80896), None),
|
||||
(unstable, intra_doc_pointers, "1.51.0", Some(80896)),
|
||||
// Allows setting the threshold for the `large_assignments` lint.
|
||||
(unstable, large_assignments, "1.52.0", Some(83518), None),
|
||||
(unstable, large_assignments, "1.52.0", Some(83518)),
|
||||
/// Allow to have type alias types for inter-crate use.
|
||||
(incomplete, lazy_type_alias, "1.72.0", Some(112792), None),
|
||||
(incomplete, lazy_type_alias, "1.72.0", Some(112792)),
|
||||
/// Allows `if/while p && let q = r && ...` chains.
|
||||
(unstable, let_chains, "1.37.0", Some(53667), None),
|
||||
(unstable, let_chains, "1.37.0", Some(53667)),
|
||||
/// Allows using `#[link(kind = "link-arg", name = "...")]`
|
||||
/// to pass custom arguments to the linker.
|
||||
(unstable, link_arg_attribute, "CURRENT_RUSTC_VERSION", Some(99427), None),
|
||||
(unstable, link_arg_attribute, "CURRENT_RUSTC_VERSION", Some(99427)),
|
||||
/// Allows using `reason` in lint attributes and the `#[expect(lint)]` lint check.
|
||||
(unstable, lint_reasons, "1.31.0", Some(54503), None),
|
||||
(unstable, lint_reasons, "1.31.0", Some(54503)),
|
||||
/// Give access to additional metadata about declarative macro meta-variables.
|
||||
(unstable, macro_metavar_expr, "1.61.0", Some(83527), None),
|
||||
(unstable, macro_metavar_expr, "1.61.0", Some(83527)),
|
||||
/// Allows `#[marker]` on certain traits allowing overlapping implementations.
|
||||
(unstable, marker_trait_attr, "1.30.0", Some(29864), None),
|
||||
(unstable, marker_trait_attr, "1.30.0", Some(29864)),
|
||||
/// A minimal, sound subset of specialization intended to be used by the
|
||||
/// standard library until the soundness issues with specialization
|
||||
/// are fixed.
|
||||
(unstable, min_specialization, "1.7.0", Some(31844), None),
|
||||
(unstable, min_specialization, "1.7.0", Some(31844)),
|
||||
/// Allows qualified paths in struct expressions, struct patterns and tuple struct patterns.
|
||||
(unstable, more_qualified_paths, "1.54.0", Some(86935), None),
|
||||
(unstable, more_qualified_paths, "1.54.0", Some(86935)),
|
||||
/// Allows the `#[must_not_suspend]` attribute.
|
||||
(unstable, must_not_suspend, "1.57.0", Some(83310), None),
|
||||
(unstable, must_not_suspend, "1.57.0", Some(83310)),
|
||||
/// Allows using `#[naked]` on functions.
|
||||
(unstable, naked_functions, "1.9.0", Some(32408), None),
|
||||
(unstable, naked_functions, "1.9.0", Some(32408)),
|
||||
/// Allows specifying the as-needed link modifier
|
||||
(unstable, native_link_modifiers_as_needed, "1.53.0", Some(81490), None),
|
||||
(unstable, native_link_modifiers_as_needed, "1.53.0", Some(81490)),
|
||||
/// Allow negative trait implementations.
|
||||
(unstable, negative_impls, "1.44.0", Some(68318), None),
|
||||
(unstable, negative_impls, "1.44.0", Some(68318)),
|
||||
/// Allows the `!` pattern.
|
||||
(incomplete, never_patterns, "CURRENT_RUSTC_VERSION", Some(118155), None),
|
||||
(incomplete, never_patterns, "CURRENT_RUSTC_VERSION", Some(118155)),
|
||||
/// Allows the `!` type. Does not imply 'exhaustive_patterns' (below) any more.
|
||||
(unstable, never_type, "1.13.0", Some(35121), None),
|
||||
(unstable, never_type, "1.13.0", Some(35121)),
|
||||
/// Allows diverging expressions to fall back to `!` rather than `()`.
|
||||
(unstable, never_type_fallback, "1.41.0", Some(65992), None),
|
||||
(unstable, never_type_fallback, "1.41.0", Some(65992)),
|
||||
/// Allows `#![no_core]`.
|
||||
(unstable, no_core, "1.3.0", Some(29639), None),
|
||||
(unstable, no_core, "1.3.0", Some(29639)),
|
||||
/// Allows the use of `no_sanitize` attribute.
|
||||
(unstable, no_sanitize, "1.42.0", Some(39699), None),
|
||||
(unstable, no_sanitize, "1.42.0", Some(39699)),
|
||||
/// Allows using the `non_exhaustive_omitted_patterns` lint.
|
||||
(unstable, non_exhaustive_omitted_patterns_lint, "1.57.0", Some(89554), None),
|
||||
(unstable, non_exhaustive_omitted_patterns_lint, "1.57.0", Some(89554)),
|
||||
/// Allows `for<T>` binders in where-clauses
|
||||
(incomplete, non_lifetime_binders, "1.69.0", Some(108185), None),
|
||||
(incomplete, non_lifetime_binders, "1.69.0", Some(108185)),
|
||||
/// Allows making `dyn Trait` well-formed even if `Trait` is not object safe.
|
||||
/// In that case, `dyn Trait: Trait` does not hold. Moreover, coercions and
|
||||
/// casts in safe Rust to `dyn Trait` for such a `Trait` is also forbidden.
|
||||
(unstable, object_safe_for_dispatch, "1.40.0", Some(43561), None),
|
||||
(unstable, object_safe_for_dispatch, "1.40.0", Some(43561)),
|
||||
/// Allows using enums in offset_of!
|
||||
(unstable, offset_of_enum, "1.75.0", Some(106655), None),
|
||||
(unstable, offset_of_enum, "1.75.0", Some(106655)),
|
||||
/// Allows using `#[optimize(X)]`.
|
||||
(unstable, optimize_attribute, "1.34.0", Some(54882), None),
|
||||
(unstable, optimize_attribute, "1.34.0", Some(54882)),
|
||||
/// Allows macro attributes on expressions, statements and non-inline modules.
|
||||
(unstable, proc_macro_hygiene, "1.30.0", Some(54727), None),
|
||||
(unstable, proc_macro_hygiene, "1.30.0", Some(54727)),
|
||||
/// Allows `&raw const $place_expr` and `&raw mut $place_expr` expressions.
|
||||
(unstable, raw_ref_op, "1.41.0", Some(64490), None),
|
||||
(unstable, raw_ref_op, "1.41.0", Some(64490)),
|
||||
/// Allows using the `#[register_tool]` attribute.
|
||||
(unstable, register_tool, "1.41.0", Some(66079), None),
|
||||
(unstable, register_tool, "1.41.0", Some(66079)),
|
||||
/// Allows the `#[repr(i128)]` attribute for enums.
|
||||
(incomplete, repr128, "1.16.0", Some(56071), None),
|
||||
(incomplete, repr128, "1.16.0", Some(56071)),
|
||||
/// Allows `repr(simd)` and importing the various simd intrinsics.
|
||||
(unstable, repr_simd, "1.4.0", Some(27731), None),
|
||||
(unstable, repr_simd, "1.4.0", Some(27731)),
|
||||
/// Allows bounding the return type of AFIT/RPITIT.
|
||||
(incomplete, return_type_notation, "1.70.0", Some(109417), None),
|
||||
(incomplete, return_type_notation, "1.70.0", Some(109417)),
|
||||
/// Allows `extern "rust-cold"`.
|
||||
(unstable, rust_cold_cc, "1.63.0", Some(97544), None),
|
||||
(unstable, rust_cold_cc, "1.63.0", Some(97544)),
|
||||
/// Allows the use of SIMD types in functions declared in `extern` blocks.
|
||||
(unstable, simd_ffi, "1.0.0", Some(27731), None),
|
||||
(unstable, simd_ffi, "1.0.0", Some(27731)),
|
||||
/// Allows specialization of implementations (RFC 1210).
|
||||
(incomplete, specialization, "1.7.0", Some(31844), None),
|
||||
(incomplete, specialization, "1.7.0", Some(31844)),
|
||||
/// Allows attributes on expressions and non-item statements.
|
||||
(unstable, stmt_expr_attributes, "1.6.0", Some(15701), None),
|
||||
(unstable, stmt_expr_attributes, "1.6.0", Some(15701)),
|
||||
/// Allows lints part of the strict provenance effort.
|
||||
(unstable, strict_provenance, "1.61.0", Some(95228), None),
|
||||
(unstable, strict_provenance, "1.61.0", Some(95228)),
|
||||
/// Allows string patterns to dereference values to match them.
|
||||
(unstable, string_deref_patterns, "1.67.0", Some(87121), None),
|
||||
(unstable, string_deref_patterns, "1.67.0", Some(87121)),
|
||||
/// Allows the use of `#[target_feature]` on safe functions.
|
||||
(unstable, target_feature_11, "1.45.0", Some(69098), None),
|
||||
(unstable, target_feature_11, "1.45.0", Some(69098)),
|
||||
/// Allows using `#[thread_local]` on `static` items.
|
||||
(unstable, thread_local, "1.0.0", Some(29594), None),
|
||||
(unstable, thread_local, "1.0.0", Some(29594)),
|
||||
/// Allows defining `trait X = A + B;` alias items.
|
||||
(unstable, trait_alias, "1.24.0", Some(41517), None),
|
||||
(unstable, trait_alias, "1.24.0", Some(41517)),
|
||||
/// Allows for transmuting between arrays with sizes that contain generic consts.
|
||||
(unstable, transmute_generic_consts, "1.70.0", Some(109929), None),
|
||||
(unstable, transmute_generic_consts, "1.70.0", Some(109929)),
|
||||
/// Allows #[repr(transparent)] on unions (RFC 2645).
|
||||
(unstable, transparent_unions, "1.37.0", Some(60405), None),
|
||||
(unstable, transparent_unions, "1.37.0", Some(60405)),
|
||||
/// Allows inconsistent bounds in where clauses.
|
||||
(unstable, trivial_bounds, "1.28.0", Some(48214), None),
|
||||
(unstable, trivial_bounds, "1.28.0", Some(48214)),
|
||||
/// Allows using `try {...}` expressions.
|
||||
(unstable, try_blocks, "1.29.0", Some(31436), None),
|
||||
(unstable, try_blocks, "1.29.0", Some(31436)),
|
||||
/// Allows `impl Trait` to be used inside type aliases (RFC 2515).
|
||||
(unstable, type_alias_impl_trait, "1.38.0", Some(63063), None),
|
||||
(unstable, type_alias_impl_trait, "1.38.0", Some(63063)),
|
||||
/// Allows the use of type ascription in expressions.
|
||||
(unstable, type_ascription, "1.6.0", Some(23416), None),
|
||||
(unstable, type_ascription, "1.6.0", Some(23416)),
|
||||
/// Allows creation of instances of a struct by moving fields that have
|
||||
/// not changed from prior instances of the same struct (RFC #2528)
|
||||
(unstable, type_changing_struct_update, "1.58.0", Some(86555), None),
|
||||
(unstable, type_changing_struct_update, "1.58.0", Some(86555)),
|
||||
/// Allows using type privacy lints (`private_interfaces`, `private_bounds`, `unnameable_types`).
|
||||
(unstable, type_privacy_lints, "1.72.0", Some(48054), None),
|
||||
(unstable, type_privacy_lints, "1.72.0", Some(48054)),
|
||||
/// Enables rustc to generate code that instructs libstd to NOT ignore SIGPIPE.
|
||||
(unstable, unix_sigpipe, "1.65.0", Some(97889), None),
|
||||
(unstable, unix_sigpipe, "1.65.0", Some(97889)),
|
||||
/// Allows unnamed fields of struct and union type
|
||||
(incomplete, unnamed_fields, "1.74.0", Some(49804), None),
|
||||
(incomplete, unnamed_fields, "1.74.0", Some(49804)),
|
||||
/// Allows unsized fn parameters.
|
||||
(unstable, unsized_fn_params, "1.49.0", Some(48055), None),
|
||||
(unstable, unsized_fn_params, "1.49.0", Some(48055)),
|
||||
/// Allows unsized rvalues at arguments and parameters.
|
||||
(incomplete, unsized_locals, "1.30.0", Some(48055), None),
|
||||
(incomplete, unsized_locals, "1.30.0", Some(48055)),
|
||||
/// Allows unsized tuple coercion.
|
||||
(unstable, unsized_tuple_coercion, "1.20.0", Some(42877), None),
|
||||
(unstable, unsized_tuple_coercion, "1.20.0", Some(42877)),
|
||||
/// Allows using the `#[used(linker)]` (or `#[used(compiler)]`) attribute.
|
||||
(unstable, used_with_arg, "1.60.0", Some(93798), None),
|
||||
(unstable, used_with_arg, "1.60.0", Some(93798)),
|
||||
/// Allows `extern "wasm" fn`
|
||||
(unstable, wasm_abi, "1.53.0", Some(83788), None),
|
||||
(unstable, wasm_abi, "1.53.0", Some(83788)),
|
||||
/// Allows `do yeet` expressions
|
||||
(unstable, yeet_expr, "1.62.0", Some(96373), None),
|
||||
(unstable, yeet_expr, "1.62.0", Some(96373)),
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
// Features are listed in alphabetical order. Tidy will fail if you don't keep it this way.
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
|
@ -1,4 +1,3 @@
|
||||
use crate::symbol::{sym, Symbol};
|
||||
use std::fmt;
|
||||
use std::str::FromStr;
|
||||
|
||||
@ -58,15 +57,6 @@ impl Edition {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn feature_name(self) -> Symbol {
|
||||
match self {
|
||||
Edition::Edition2015 => sym::rust_2015_preview,
|
||||
Edition::Edition2018 => sym::rust_2018_preview,
|
||||
Edition::Edition2021 => sym::rust_2021_preview,
|
||||
Edition::Edition2024 => sym::rust_2024_preview,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_stable(self) -> bool {
|
||||
match self {
|
||||
Edition::Edition2015 => true,
|
||||
|
@ -1350,13 +1350,10 @@ symbols! {
|
||||
rtm_target_feature,
|
||||
rust,
|
||||
rust_2015,
|
||||
rust_2015_preview,
|
||||
rust_2018,
|
||||
rust_2018_preview,
|
||||
rust_2021,
|
||||
rust_2021_preview,
|
||||
rust_2024,
|
||||
rust_2024_preview,
|
||||
rust_begin_unwind,
|
||||
rust_cold_cc,
|
||||
rust_eh_catch_typeinfo,
|
||||
|
@ -1,5 +1,5 @@
|
||||
// rustfmt-edition: 2015
|
||||
#![feature(rust_2018_preview, uniform_paths)]
|
||||
#![feature(uniform_paths)]
|
||||
use futures::prelude::*;
|
||||
use http_03::cli::Cli;
|
||||
use hyper::{service::service_fn_ok, Body, Response, Server};
|
||||
|
@ -1,5 +1,5 @@
|
||||
// rustfmt-edition: 2018
|
||||
#![feature(rust_2018_preview, uniform_paths)]
|
||||
#![feature(uniform_paths)]
|
||||
use futures::prelude::*;
|
||||
use http_03::cli::Cli;
|
||||
use hyper::{service::service_fn_ok, Body, Response, Server};
|
||||
|
@ -1,5 +1,5 @@
|
||||
// rustfmt-edition: 2015
|
||||
#![feature(rust_2018_preview, uniform_paths)]
|
||||
#![feature(uniform_paths)]
|
||||
use futures::prelude::*;
|
||||
use http_03::cli::Cli;
|
||||
use hyper::{service::service_fn_ok, Body, Response, Server};
|
||||
|
@ -1,5 +1,5 @@
|
||||
// rustfmt-edition: 2018
|
||||
#![feature(rust_2018_preview, uniform_paths)]
|
||||
#![feature(uniform_paths)]
|
||||
use ::log::{error, info, log};
|
||||
use futures::prelude::*;
|
||||
use http_03::cli::Cli;
|
||||
|
@ -1,5 +0,0 @@
|
||||
// check-pass
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
|
||||
fn main() {}
|
@ -1,7 +0,0 @@
|
||||
// edition:2018
|
||||
// check-pass
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
//~^ WARN the feature `rust_2018_preview` is included in the Rust 2018 edition
|
||||
|
||||
fn main() {}
|
@ -1,9 +0,0 @@
|
||||
warning[E0705]: the feature `rust_2018_preview` is included in the Rust 2018 edition
|
||||
--> $DIR/edition-feature-redundant.rs:4:12
|
||||
|
|
||||
LL | #![feature(rust_2018_preview)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0705`.
|
@ -1,15 +0,0 @@
|
||||
// run-pass
|
||||
|
||||
#![allow(dead_code)]
|
||||
#![allow(unused_variables)]
|
||||
// Checks if the correct registers are being used to pass arguments
|
||||
// when the sysv64 ABI is specified.
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
|
||||
pub trait Foo {}
|
||||
|
||||
// should compile without the dyn trait feature flag
|
||||
fn foo(x: &dyn Foo) {}
|
||||
|
||||
pub fn main() {}
|
@ -1,10 +0,0 @@
|
||||
// check-pass
|
||||
|
||||
// This is a stub feature that doesn't control anything, so to make tidy happy,
|
||||
// gate-test-test_2018_feature
|
||||
|
||||
#![feature(test_2018_feature)]
|
||||
//~^ WARN the feature `test_2018_feature` is included in the Rust 2018 edition
|
||||
#![feature(rust_2018_preview)]
|
||||
|
||||
fn main() {}
|
@ -1,9 +0,0 @@
|
||||
warning[E0705]: the feature `test_2018_feature` is included in the Rust 2018 edition
|
||||
--> $DIR/E0705.rs:6:12
|
||||
|
|
||||
LL | #![feature(test_2018_feature)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0705`.
|
@ -1,8 +1,6 @@
|
||||
// run-pass
|
||||
// aux-build:custom-attr-only-one-derive.rs
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
|
||||
#[macro_use]
|
||||
extern crate custom_attr_only_one_derive;
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
// run-rustfix
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
mod foo {
|
||||
|
@ -1,6 +1,5 @@
|
||||
// run-rustfix
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
mod foo {
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-fully-qualified-paths.rs:19:25
|
||||
--> $DIR/edition-lint-fully-qualified-paths.rs:18:25
|
||||
|
|
||||
LL | let _: <foo::Baz as ::foo::Foo>::Bar = ();
|
||||
| ^^^^^^^^^^ help: use `crate`: `crate::foo::Foo`
|
||||
@ -7,13 +7,13 @@ LL | let _: <foo::Baz as ::foo::Foo>::Bar = ();
|
||||
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018!
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
note: the lint level is defined here
|
||||
--> $DIR/edition-lint-fully-qualified-paths.rs:4:9
|
||||
--> $DIR/edition-lint-fully-qualified-paths.rs:3:9
|
||||
|
|
||||
LL | #![deny(absolute_paths_not_starting_with_crate)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-fully-qualified-paths.rs:19:25
|
||||
--> $DIR/edition-lint-fully-qualified-paths.rs:18:25
|
||||
|
|
||||
LL | let _: <foo::Baz as ::foo::Foo>::Bar = ();
|
||||
| ^^^^^^^^^^ help: use `crate`: `crate::foo::Foo`
|
||||
@ -23,7 +23,7 @@ LL | let _: <foo::Baz as ::foo::Foo>::Bar = ();
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-fully-qualified-paths.rs:25:13
|
||||
--> $DIR/edition-lint-fully-qualified-paths.rs:24:13
|
||||
|
|
||||
LL | let _: <::foo::Baz as foo::Foo>::Bar = ();
|
||||
| ^^^^^^^^^^ help: use `crate`: `crate::foo::Baz`
|
||||
|
@ -1,6 +1,5 @@
|
||||
// run-rustfix
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
#![allow(unused_imports)]
|
||||
#![allow(dead_code)]
|
||||
|
@ -1,6 +1,5 @@
|
||||
// run-rustfix
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
#![allow(unused_imports)]
|
||||
#![allow(dead_code)]
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:17:5
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:16:5
|
||||
|
|
||||
LL | use foo::{bar::{baz::{}}};
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::foo::{bar::{baz::{}}}`
|
||||
@ -7,13 +7,13 @@ LL | use foo::{bar::{baz::{}}};
|
||||
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018!
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
note: the lint level is defined here
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:4:9
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:3:9
|
||||
|
|
||||
LL | #![deny(absolute_paths_not_starting_with_crate)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:21:5
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:20:5
|
||||
|
|
||||
LL | use foo::{bar::{XX, baz::{}}};
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::foo::{bar::{XX, baz::{}}}`
|
||||
@ -22,7 +22,7 @@ LL | use foo::{bar::{XX, baz::{}}};
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:21:5
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:20:5
|
||||
|
|
||||
LL | use foo::{bar::{XX, baz::{}}};
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::foo::{bar::{XX, baz::{}}}`
|
||||
@ -32,7 +32,7 @@ LL | use foo::{bar::{XX, baz::{}}};
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:27:5
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:26:5
|
||||
|
|
||||
LL | use foo::{bar::{baz::{}, baz1::{}}};
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::foo::{bar::{baz::{}, baz1::{}}}`
|
||||
@ -41,7 +41,7 @@ LL | use foo::{bar::{baz::{}, baz1::{}}};
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:27:5
|
||||
--> $DIR/edition-lint-nested-empty-paths.rs:26:5
|
||||
|
|
||||
LL | use foo::{bar::{baz::{}, baz1::{}}};
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::foo::{bar::{baz::{}, baz1::{}}}`
|
||||
|
@ -1,6 +1,5 @@
|
||||
// run-rustfix
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
use crate::foo::{a, b};
|
||||
|
@ -1,6 +1,5 @@
|
||||
// run-rustfix
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
use foo::{a, b};
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-nested-paths.rs:6:5
|
||||
--> $DIR/edition-lint-nested-paths.rs:5:5
|
||||
|
|
||||
LL | use foo::{a, b};
|
||||
| ^^^^^^^^^^^ help: use `crate`: `crate::foo::{a, b}`
|
||||
@ -7,13 +7,13 @@ LL | use foo::{a, b};
|
||||
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018!
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
note: the lint level is defined here
|
||||
--> $DIR/edition-lint-nested-paths.rs:4:9
|
||||
--> $DIR/edition-lint-nested-paths.rs:3:9
|
||||
|
|
||||
LL | #![deny(absolute_paths_not_starting_with_crate)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-nested-paths.rs:6:5
|
||||
--> $DIR/edition-lint-nested-paths.rs:5:5
|
||||
|
|
||||
LL | use foo::{a, b};
|
||||
| ^^^^^^^^^^^ help: use `crate`: `crate::foo::{a, b}`
|
||||
@ -23,7 +23,7 @@ LL | use foo::{a, b};
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-nested-paths.rs:23:13
|
||||
--> $DIR/edition-lint-nested-paths.rs:22:13
|
||||
|
|
||||
LL | use foo::{self as x, c};
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::foo::{self as x, c}`
|
||||
@ -32,7 +32,7 @@ LL | use foo::{self as x, c};
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-nested-paths.rs:23:13
|
||||
--> $DIR/edition-lint-nested-paths.rs:22:13
|
||||
|
|
||||
LL | use foo::{self as x, c};
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::foo::{self as x, c}`
|
||||
|
@ -1,7 +1,6 @@
|
||||
// aux-build:edition-lint-paths.rs
|
||||
// run-rustfix
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
#![allow(unused)]
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
// aux-build:edition-lint-paths.rs
|
||||
// run-rustfix
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
#![allow(unused)]
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-paths.rs:12:9
|
||||
--> $DIR/edition-lint-paths.rs:11:9
|
||||
|
|
||||
LL | use bar::Bar;
|
||||
| ^^^^^^^^ help: use `crate`: `crate::bar::Bar`
|
||||
@ -7,13 +7,13 @@ LL | use bar::Bar;
|
||||
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018!
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
note: the lint level is defined here
|
||||
--> $DIR/edition-lint-paths.rs:5:9
|
||||
--> $DIR/edition-lint-paths.rs:4:9
|
||||
|
|
||||
LL | #![deny(absolute_paths_not_starting_with_crate)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-paths.rs:19:9
|
||||
--> $DIR/edition-lint-paths.rs:18:9
|
||||
|
|
||||
LL | use bar;
|
||||
| ^^^ help: use `crate`: `crate::bar`
|
||||
@ -22,7 +22,7 @@ LL | use bar;
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-paths.rs:25:9
|
||||
--> $DIR/edition-lint-paths.rs:24:9
|
||||
|
|
||||
LL | use {main, Bar as SomethingElse};
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::{main, Bar as SomethingElse}`
|
||||
@ -31,7 +31,7 @@ LL | use {main, Bar as SomethingElse};
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-paths.rs:25:9
|
||||
--> $DIR/edition-lint-paths.rs:24:9
|
||||
|
|
||||
LL | use {main, Bar as SomethingElse};
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::{main, Bar as SomethingElse}`
|
||||
@ -41,7 +41,7 @@ LL | use {main, Bar as SomethingElse};
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-paths.rs:25:9
|
||||
--> $DIR/edition-lint-paths.rs:24:9
|
||||
|
|
||||
LL | use {main, Bar as SomethingElse};
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::{main, Bar as SomethingElse}`
|
||||
@ -51,7 +51,7 @@ LL | use {main, Bar as SomethingElse};
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-paths.rs:40:5
|
||||
--> $DIR/edition-lint-paths.rs:39:5
|
||||
|
|
||||
LL | use bar::Bar;
|
||||
| ^^^^^^^^ help: use `crate`: `crate::bar::Bar`
|
||||
@ -60,7 +60,7 @@ LL | use bar::Bar;
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-paths.rs:52:9
|
||||
--> $DIR/edition-lint-paths.rs:51:9
|
||||
|
|
||||
LL | use *;
|
||||
| ^ help: use `crate`: `crate::*`
|
||||
@ -69,7 +69,7 @@ LL | use *;
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-paths.rs:57:6
|
||||
--> $DIR/edition-lint-paths.rs:56:6
|
||||
|
|
||||
LL | impl ::foo::SomeTrait for u32 {}
|
||||
| ^^^^^^^^^^^^^^^^ help: use `crate`: `crate::foo::SomeTrait`
|
||||
@ -78,7 +78,7 @@ LL | impl ::foo::SomeTrait for u32 {}
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-paths.rs:62:13
|
||||
--> $DIR/edition-lint-paths.rs:61:13
|
||||
|
|
||||
LL | let x = ::bar::Bar;
|
||||
| ^^^^^^^^^^ help: use `crate`: `crate::bar::Bar`
|
||||
|
@ -6,7 +6,6 @@
|
||||
// The "normal case". Ideally we would remove the `extern crate` here,
|
||||
// but we don't.
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
extern crate edition_lint_paths;
|
||||
|
@ -6,7 +6,6 @@
|
||||
// The "normal case". Ideally we would remove the `extern crate` here,
|
||||
// but we don't.
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
extern crate edition_lint_paths;
|
||||
|
@ -6,7 +6,6 @@
|
||||
// rather than being accessed directly. Unless we rewrite that path,
|
||||
// we can't drop the extern crate.
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
extern crate edition_lint_paths;
|
||||
|
@ -6,7 +6,6 @@
|
||||
// rather than being accessed directly. Unless we rewrite that path,
|
||||
// we can't drop the extern crate.
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
extern crate edition_lint_paths;
|
||||
|
@ -4,7 +4,6 @@
|
||||
// Oddball: crate is renamed, making it harder for us to rewrite
|
||||
// paths. We don't (and we leave the `extern crate` in place).
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
extern crate edition_lint_paths as my_crate;
|
||||
|
@ -4,7 +4,6 @@
|
||||
// Oddball: crate is renamed, making it harder for us to rewrite
|
||||
// paths. We don't (and we leave the `extern crate` in place).
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
extern crate edition_lint_paths as my_crate;
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/extern-crate-rename.rs:12:5
|
||||
--> $DIR/extern-crate-rename.rs:11:5
|
||||
|
|
||||
LL | use my_crate::foo;
|
||||
| ^^^^^^^^^^^^^ help: use `crate`: `crate::my_crate::foo`
|
||||
@ -7,7 +7,7 @@ LL | use my_crate::foo;
|
||||
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018!
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
note: the lint level is defined here
|
||||
--> $DIR/extern-crate-rename.rs:8:9
|
||||
--> $DIR/extern-crate-rename.rs:7:9
|
||||
|
|
||||
LL | #![deny(absolute_paths_not_starting_with_crate)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -5,7 +5,6 @@
|
||||
// us to rewrite paths. We don't (and we leave the `extern crate` in
|
||||
// place).
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
mod m {
|
||||
|
@ -5,7 +5,6 @@
|
||||
// us to rewrite paths. We don't (and we leave the `extern crate` in
|
||||
// place).
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(absolute_paths_not_starting_with_crate)]
|
||||
|
||||
mod m {
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/extern-crate-submod.rs:19:5
|
||||
--> $DIR/extern-crate-submod.rs:18:5
|
||||
|
|
||||
LL | use m::edition_lint_paths::foo;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::m::edition_lint_paths::foo`
|
||||
@ -7,7 +7,7 @@ LL | use m::edition_lint_paths::foo;
|
||||
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018!
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
note: the lint level is defined here
|
||||
--> $DIR/extern-crate-submod.rs:9:9
|
||||
--> $DIR/extern-crate-submod.rs:8:9
|
||||
|
|
||||
LL | #![deny(absolute_paths_not_starting_with_crate)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -4,8 +4,6 @@
|
||||
//
|
||||
// run-pass
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
|
||||
trait A {
|
||||
|
||||
}
|
||||
|
@ -4,8 +4,6 @@
|
||||
//
|
||||
// run-pass
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
|
||||
trait A {
|
||||
|
||||
}
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
#![crate_type = "proc-macro"]
|
||||
#![deny(rust_2018_compatibility)]
|
||||
#![feature(rust_2018_preview)]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
||||
|
@ -4,7 +4,6 @@
|
||||
// rustfix-only-machine-applicable
|
||||
// check-pass
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![warn(rust_2018_compatibility)]
|
||||
|
||||
extern crate suggestions_not_always_applicable as foo;
|
||||
|
@ -4,7 +4,6 @@
|
||||
// rustfix-only-machine-applicable
|
||||
// check-pass
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![warn(rust_2018_compatibility)]
|
||||
|
||||
extern crate suggestions_not_always_applicable as foo;
|
||||
|
@ -1,6 +1,5 @@
|
||||
// run-pass
|
||||
|
||||
#![feature(rust_2018_preview)]
|
||||
#![deny(unknown_lints)]
|
||||
|
||||
#[allow(clippy::almost_swapped)]
|
||||
|
Loading…
Reference in New Issue
Block a user