Note
The contents of this page are informational.
E. Changelog¶
This page describes the changes that have been applied to the FLS itself to address changes and new features introduced in each Rust release. Every item listed in the “Language” section of the release note is reproduced here, along with the change that has been applied due to it.
Caution
This page is not an exhaustive list of all of the changes in a release, just the language changes that had an impact to the FLS. See the release notes for a full list of changes.
E.1. Language changes in Rust 1.95.0¶
irrefutable_let_patterns lint no longer lints on let chains
Lints are outside the scope of the FLS.
-
The target is outside the scope of the FLS.
const-eval: be more consistent in the behavior of padding during typed copies
-
This implementation-specifc behavior is outside the scope of the FLS.
Make operational semantics of pattern matching independent of crate and module
E.2. Language changes in Rust 1.94.0¶
Impls and impl items inherit dead_code lint level of the corresponding traits and trait items
Lints are outside the scope of the FLS.
-
The target is outside the scope of the FLS.
Add warn-by-default unused_visibilities lint for visibility on const _ declarations
Lints are outside the scope of the FLS.
-
Changed paragraph: 2.3:5
Avoid incorrect lifetime errors for closures
The mechanics of the borrow checker are outside the scope of the FLS.
E.3. Language changes in Rust 1.93.1¶
Don’t try to recover keyword as non-keyword identifier
Bug fix in the compiler without visible ramifications.
Fix clippy::panicking_unwrap false-positive on field access with implicit deref
Lints are outside the scope of the FLS.
Revert “Update wasm-related dependencies in CI”
The target is outside the scope of the FLS.
E.4. Language changes in Rust 1.93.0¶
Stabilize several s390x vector-related target features and the is_s390x_feature_detected! macro
The target is outside the scope of the FLS.
Stabilize declaration of C-style variadic functions for the system ABI
Emit error when using some keyword as a cfg predicate
This bug was not documented in the FLS.
-
Changed syntax:
New syntax:
New glossary entry: inline assembly argument
New paragraphs:
During const-evaluation, support copying pointers byte-by-byte
Already covered by the classification of constant expressions.
LUB coercions now correctly handle function item types, and functions with differing safeties
-
Removed paragraphs:
Paragraph fls_ooOYxhVh8hZo
Paragraph fls_zkNFeBLy80UA
Paragraph fls_VhzGfnWg7YrG
Paragraph fls_qC6L0km0ZMFI
Paragraph fls_ibYKKQdB2tDn
Paragraph fls_dQdSxf8kOgbi
-
Lints are outside the scope of the FLS.
Add warn-by-default function_casts_as_integer lint
Lints are outside the scope of the FLS.
E.5. FLS corrections¶
Deduplicate historically reused paragraph IDs in the glossary.
Corrected glossary discriminant type paragraph ID: - old reused ID:
fls_t4yeovFm83Wo- new unique ID:fls_kqdvWGi9cglmCorrected glossary local trait paragraph ID: - old reused ID:
fls_I9JaKZelMiby- new unique ID:fls_H5vkbMFvzrFs
E.6. Language changes in Rust 1.92.0¶
Document MaybeUninit representation and validity
This is not a language change.
Allow “&raw [mut | const]” for union field in safe code
This lifted restriction was not documented in the FLS.
Prefer item bounds of associated types over where-bounds for auto-traits and Sized
This entry is a fix for a regression which existed only in the development versions of the Rust toolchain. These toolchains are outside the scope of the FLS.
Do not materialize X in “[X; 0]” when X is unsizing a const
This behavior was not documented in the FLS.
-
This lifted restriction was not documented in the FLS.
-
Lints are outside the scope of the FLS.
Allow specifying multiple bounds for same associated item, except in trait objects
This lifted restriction was not documented in the FLS.
Slightly strengthen higher-ranked region handling in coherence
The lifted restriction was not documented in the FLS.
The unused_must_use lint no longer warns on “Result<(), Uninhabited>” (for instance, “Result<(), !>”), or “ControlFlow<Uninhabited, ()>”. This avoids having to check for an error that can never happen.
Lints are outside the scope of the FLS.
E.7. Language changes in Rust 1.91.1¶
This release has no language changes.
E.8. Language changes in Rust 1.91.0¶
Lower pattern bindings in the order they’re written and base drop order on primary bindings’ order
Stabilize declaration of C-style variadic functions for ‘sysv64’, ‘win64’, ‘efiapi’, and ‘aapcs’ ABIs. This brings these ABIs in line with the C ABI: variadic functions can be declared in extern blocks but not defined.
Add dangling_pointers_from_locals lint to warn against dangling pointers from local variables
Lints are outside the scope of the FLS.
Upgrade semicolon_in_expressions_from_macros from warn to deny
Lints are outside the scope of the FLS.
Stabilize LoongArch32 inline assembly
The target is outside the scope of the FLS
Add warn-by-default integer_to_ptr_transmutes lint against integer-to-pointer transmutes
Lints are outside the scope of the FLS.
Stabilize ‘sse4a’ and ‘tbm’ target features
Changed syntax:
FeatureNew paragraphs:
Add ‘target_env = “macabi”’ and ‘target_env = “sim”’ cfgs as replacements for the target_abi cfgs with the same values.
Configuration options are environment-specific and not exhaustive.
E.9. Language changes in Rust 1.90.0¶
Split up the unknown_or_malformed_diagnostic_attributes lint
Lints are outside the scope of the FLS.
-
This lifted restriction was not documented in the FLS.
The restriction on patterns is documented in 5.5:5.
New paragraph: 6.1.2:34
Paragraph 6.1.2:34 replaces Paragraph fls_6g7c1kjrmfnr and Paragraph fls_hkbwa8xx2fwx.
New paragraphs:
Paragraph fls_ooOYxhVh8hZo
Paragraph fls_zkNFeBLy80UA
Paragraph fls_VhzGfnWg7YrG
Paragraph fls_ibYKKQdB2tDn
Paragraph fls_dQdSxf8kOgbi
Paragraph fls_qC6L0km0ZMFI
Allow volatile access to non-Rust memory, including address 0
Lints are outside the scope of the FLS.
E.10. Language changes in Rust 1.89.0¶
Stabilize explicitly inferred const arguments (feature(generic_arg_infer))
Add a warn-by-default mismatched_lifetime_syntaxes lint.
Lints are outside the scope of the FLS.
-
Lints are outside the scope of the FLS.
Make the dangerous_implicit_autorefs lint deny-by-default
Lints are outside the scope of the FLS.
Stabilize the avx512 target features
Changed syntax:
FeatureNew paragraphs:
Stabilize these target features for x86: kl, widekl
Changed syntax:
FeatureNew paragraphs:
Stabilize these target features for x86: sha512, sm3, sm4
Changed syntax:
FeatureNew paragraphs:
Stabilize these LoongArch target features: f, d, frecipe, lasx, lbt, lsx, lvz
The target is outside the scope of the FLS.
Remove i128 and u128 from improper_ctypes_definitions lint
Lints are outside the scope of the FLS.
Stabilize repr128 (#[repr(u128), #repr(i128)])
The FLS already documented the semantics.
Allow #![doc(test(attr(..))) everywhere
Documentation tests are outside the scope of the FLS.
Extend temporary lifetime extension to also go through tuple struct and tuple variant constructors
extern “C” functions on the wasm32-unknown-unknown target now have a standards compliant ABI
The target is outside the scope of the FLS.
E.11. Language changes in Rust 1.88.0¶
Stabilize let_chains feature in the 2024 edition
The 2024 edition is outside the scope of the FLS.
Stabilize naked_functions feature
New sections: Attribute naked
Changed paragraphs:
New paragraphs:
New syntax:
SymPathExpression
Stabilize cfg_boolean_literals feature
Changed syntax:
ConfigurationPredicate
Fully de-stabilize the #[bench] attribute
Unstable features are outside the scope of the FLS.
-
Lints are outside the scope of the FLS.
Add invalid_null_arguments lint to prevent invalid usage of null pointers
Lints are outside the scope of the FLS.
Change trait impl candidate preference for builtin impls and trivial where-clauses.
Trait impl candidate preferences of the compiler are outside the scope of the FLS.
Check types of generic const parameter defaults
This bug was not documented in the FLS.
E.12. Language changes in Rust 1.87.0¶
-
New section: Label block
Allow parsing open beginning ranges (..EXPR) after unary operators: ! - *
This lifted restriction was not documented in the FLS.
Don’t require method impls for methods with “Self: Sized” bounds in impls for unsized types
This lifted restriction was not documented in the FLS.
-
This lifted restriction was not documented in the FLS.
E.13. Language changes in Rust 1.86.0¶
Stabilize upcasting trait objects to supertraits.
New paragraph: 4.12.3:30
Allow safe functions to be marked with the #[target_feature] attribute.
Changed paragraph: 13.2.1.4:1
The missing_abi lint now warns-by-default.
Lints are outside the scope of the FLS.
-
Lints are outside the scope of the FLS.
More pointers are now detected as definitely not-null based on their alignment in const eval.
The concrete semantics of constant evaluation is not described in the FLS.
Empty repr() attribute applied to invalid items are now correctly rejected.
This bug was not documented in the FLS.
-
Tool-related attributes are outside the scope of the FLS.
The incorrect semantics of
#![test]were not documented in the FLS.
E.14. Language changes in Rust 1.85.0¶
The 2024 Edition is now stable.
The 2024 edition is outside the scope of the FLS.
-
New paragraphs:
Changed syntax:
ClosureExpression
Stabilize `#[diagnostic::do_not_recommend]`
Tool-related attributes are outside the scope of the FLS.
Add `unpredictable_function_pointer_comparisons` lint to warn against function pointer comparisons
Lints are outside the scope of the FLS.
Lint on combining `#[no_mangle]` and `#[export_name]` attributes.
Lints are outside the scope of the FLS.
E.15. Language changes in Rust 1.84.0¶
Allow `#[deny]` inside `#[forbid]` as a no-op
Lints are outside the scope of the FLS.
-
Conforming tool usage is outside the scope of the FLS.
Use the next-generation trait solver in coherence
The trait solver is outside the scope of the FLS.
Allow coercions to drop the principal of trait objects
Changed paragraph: 4.12.3:29
Support `/` as the path separator for `include!()` in all cases on Windows
This restriction of the include macro was not documented in the FLS.
Taking a raw ref (`raw (const|mut)`) of a deref of a pointer (`*ptr`) is now safe
Changed paragraph: 6.5.3:4
Stabilize s390x inline assembly
This target is outside the scope of the FLS.
Stabilize Arm64EC inline assembly
This target is outside the scope of the FLS.
Lint against creating pointers to immediately dropped temporaries
Lints are outside the scope of the FLS.
Execute drop glue when unwinding in an `extern “C”` function
This lifted restriction was not documented in the FLS.
E.16. Language changes in Rust 1.83.0¶
Stabilize `&mut`, `*mut`, `&Cell`, and `*const Cell` in const.
Changed paragraphs:
Paragraph fls_6g7c1kjrmfnr
Paragraph fls_hkbwa8xx2fwx
Removed paragraph: Paragraph fls_ox6sgl9n43g2
Allow creating references to statics in `const` initializers.
This lifted restriction was not documented in the FLS.
Implement raw lifetimes and labels (`’r#ident`).
Changed syntax:
Lifetime
Define behavior when atomic and non-atomic reads race.
Already covered by the definition of data race.
Disallow implicit coercions from places of type `!`
The FLS does not specify type inference to such a degree.
`const extern` functions can now be defined for other calling conventions.
This lifted restriction was not documented in the FLS.
Stabilize `expr_2021` macro fragment specifier in all editions.
Changed syntax:
MacroFragmentSpecifierChanged paragraphs:
The `non_local_definitions` lint now fires on less code and warns by default.
Lints are outside the scope of the FLS.
E.17. Language changes in Rust 1.82.0¶
Don’t make statement nonterminals match pattern nonterminals
Parsing behavior of non-terminals within declarative macros is outside the scope of the FLS.
Patterns matching empty types can now be omitted in common cases
Enforce supertrait outlives obligations when using trait impls
The FLS does not specify type inference to such a degree.
-
Library-defined macros are outside the scope of the FLS.
&raw (const|mut) appears as a new feature separately below.
size_of_val_raw: for length 0 this is safe to call
Library-defined functions are outside the scope of the FLS.
Reorder trait bound modifiers *after* `for<…>` binder in trait bounds
Changed syntax:
TraitBound
Stabilize opaque type precise capturing (RFC 3617)
Changed syntax:
New syntax:
New paragraphs:
Stabilize `&raw const` and `&raw mut` operators (RFC 2582)
New section: Raw Borrow Expression
New paragraph: 6.1.4:23
Stabilize unsafe extern blocks (RFC 3484)
New syntax:
ItemSafetyChanged syntax:
Changed paragraphs:
New paragraphs:
Removed paragraph Paragraph fls_iaimuqcclstl
Stabilize nested field access in `offset_of!`
Library-defined macros are outside the scope of the FLS.
Do not require `T` to be live when dropping `[T; 0]`
The mechanics of the borrow checker are outside the scope of the FLS.
Stabilize `const` operands in inline assembly
New syntax:
ConstRegisterExpressionNew paragraphs:
Stabilize floating-point arithmetic in `const fn`
New paragraph: 6.5:2
Removed paragraph: Paragraph fls_9mrrosm8jnn7
Stabilize explicit opt-in to unsafe attributes
New section: Attribute unsafe
Document NaN bit patterns guarantees
New paragraph: 4.3.3.1:3
E.18. Language changes in Rust 1.81.0¶
Abort on uncaught panics in `extern “C”` functions.
The mechanics of unwinding are outside the scope of the FLS.
Fix ambiguous cases of multiple `&` in elided self lifetimes.
Changed paragraph: 4.14.3.1:15
New paragraph: 4.14.3.1:6
-
New paragraph: 13.2:19
Change method resolution to constrain hidden types instead of rejecting method candidates.
The FLS does not specify type inference to such a degree.
Bump `elided_lifetimes_in_associated_constant` to deny.
Lints are outside the scope of the FLS.
`offset_from`: always allow pointers to point to the same address.
This lifted restriction was not documented in the FLS.
Allow constraining opaque types during subtyping in the trait system.
The FLS does not specify type inference to such a degree.
Allow constraining opaque types during various unsizing casts.
The FLS does not specify type inference to such a degree.
Deny keyword lifetimes pre-expansion.
No change: the FLS already specifies this restriction in
Lifetime
E.19. Language changes in Rust 1.80.0¶
Allow zero-byte offsets and ZST read/writes on arbitrary pointers
This lifted restriction was not documented in the FLS.
Support C23’s variadics without a named parameter
This lifted restriction was not documented in the FLS.
Stabilize `exclusive_range_pattern` feature
Changed syntax:
RangePatternNew syntax:
ExclusiveRangePatternChanged paragraph: 5.6:16
New paragraphs:
E.20. Language changes in Rust 1.79.0¶
Stabilize inline `const {}` expressions.
New section: Const Blocks
Prevent opaque types being instantiated twice with different regions within the same function.
Already described in 4.12.2:51.
Stabilize WebAssembly target features that are in phase 4 and 5.
This target is outside the scope of the FLS.
Add the `redundant_lifetimes` lint to detect lifetimes which are semantically redundant.
Lints are outside the scope of the FLS.
Stabilize the `unnameable_types` lint for public types that can’t be named.
Lints are outside the scope of the FLS.
Enable debuginfo in macros, and stabilize `-C collapse-macro-debuginfo` and `#[collapse_debuginfo]`.
New section: Attribute collapse_debuginfo
Propagate temporary lifetime extension into `if` and `match` expressions.
Restrict promotion of `const fn` calls.
Already described in 7.4.1:6.
Warn against refining impls of crate-private traits with `refining_impl_trait` lint.
Lints are outside the scope of the FLS.
Stabilize associated type bounds (RFC 2289).
New paragraph: 12.3:5
Stabilize importing `main` from other modules or crates.
This lifted restriction was not documented in the FLS.
While updating the FLS to account for this feature, we realized that the way the FLS described crate types was incorrect. We rectified this:
New section: Program Entry Point
Changed glossary entries:
New glossary entry: crate type
Changed paragraphs:
New paragraphs:
Moved paragraph: 18.7:2
Check return types of function types for well-formedness
The mechanism of trait resolution is outside the scope of the FLS.
Change inductive trait solver cycles to be ambiguous
The trait solver is outside the scope of the FLS.
E.21. Language changes in Rust 1.78.0¶
Stabilize `#[cfg(target_abi = …)]`
Configuration options are outside the scope of the FLS.
Stabilize the `#[diagnostic]` namespace and `#[diagnostic::on_unimplemented]` attribute
Tool-related attributes are outside the scope of the FLS.
Make async-fn-in-trait implementable with concrete signatures
The FLS already documented the semantics.
Make matching on NaN a hard error, and remove the rest of `illegal_floating_point_literal_pattern`
New paragraph: 5.3:3
static mut: allow mutable reference to arbitrary types, not just slices and arrays
This lifted restriction was not documented in the FLS.
Extend `invalid_reference_casting` to include references casting to bigger memory layout
Lints are outside the scope of the FLS.
Add `non_contiguous_range_endpoints` lint for singleton gaps after exclusive ranges
Lints are outside the scope of the FLS.
Add `wasm_c_abi` lint for use of older wasm-bindgen versions
Lints are outside the scope of the FLS.
Update `indirect_structural_match` and `pointer_structural_match` lints to match RFC
Lints are outside the scope of the FLS.
Make non-`PartialEq`-typed consts as patterns a hard error
Already described in 5.5:4.
Split `refining_impl_trait` lint into `_reachable`, `_internal` variants
Lints are outside the scope of the FLS.
Remove unnecessary type inference when using associated types inside of higher ranked `where`-bounds
The FLS does not document type inference to such a degree.
Weaken eager detection of cyclic types during type inference
The FLS does not specify type inference to such a degree.
`trait Trait: Auto {}`: allow upcasting from `dyn Trait` to `dyn Trait + Auto`
New paragraph: 4.12.3:29
E.22. language changes in Rust 1.77.0¶
Reveal opaque types within the defining body for exhaustiveness checking.
Concrete type introspection is outside the scope of the FLS.
-
New section: C String Literals
-
This is not a language change.
Add lint `static_mut_refs` to warn on references to mutable statics.
Lints are outside the scope of the FLS.
Support async recursive calls (as long as they have indirection).
This lifted restriction was not documented in the FLS.
Undeprecate lint `unstable_features` and make use of it in the compiler.
Lints are outside the scope of the FLS.
Make inductive cycles in coherence ambiguous always.
The trait solver is outside the scope of the FLS.
Get rid of type-driven traversal in const-eval interning, only as a future compatibility lint for now.
This lifted restriction was not documented in the FLS.
Deny braced macro invocations in let-else.
New paragraph: 8.1:4