From 6a3409ea141996b0331b8fd6171318f407fcff11 Mon Sep 17 00:00:00 2001 From: kirtchev-adacore Date: Mon, 6 Apr 2026 13:06:20 +0300 Subject: [PATCH] Standardize Changelog content This MR updates the contents of the Changelog to follow the instructions given in the Developer Guide. Closes https://github.com/rust-lang/fls/issues/690 --- src/changelog.rst | 681 ++++++++++++++++++++++++++-------------------- 1 file changed, 381 insertions(+), 300 deletions(-) diff --git a/src/changelog.rst b/src/changelog.rst index 62532a17..0cec1613 100644 --- a/src/changelog.rst +++ b/src/changelog.rst @@ -24,47 +24,45 @@ Language changes in Rust 1.94.0 - `Impls and impl items inherit dead_code lint level of the corresponding traits and trait items `_ - - No change: Lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Stabilize additional 29 RISC-V target features including large portions of the RVA22U64 / RVA23U64 profiles `_ - - No change: the target is outside the scope of FLS + - The target is outside the scope of the FLS. - `Add warn-by-default unused_visibilities lint for visibility on const _ declarations `_ - - No change: Lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Update to Unicode 17 `_ - - Changed paragraphs: - - - :p:`fls_jpecw46eh061` + - Changed paragraph: :p:`fls_jpecw46eh061` - `Avoid incorrect lifetime errors for closures `_ - - No change: the exact machanics of the borrow checker are outside the scope of the FLS + - The mechanics of the borrow checker are outside the scope of the FLS. Language changes in Rust 1.93.1 ------------------------------- - `Don’t try to recover keyword as non-keyword identifier `_ - - No change: bug fix in the compiler without visible ramifications + - Bug fix in the compiler without visible ramifications. - `Fix clippy::panicking_unwrap false-positive on field access with implicit deref `_ - - No change: Lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Revert “Update wasm-related dependencies in CI” `_ - - No change: the target is outside the scope of FLS + - The target is outside the scope of the FLS. Language changes in Rust 1.93.0 ------------------------------- - `Stabilize several s390x vector-related target features and the is_s390x_feature_detected! macro `_ - - No change: the target is outside the scope of FLS + - The target is outside the scope of the FLS. - `Stabilize declaration of C-style variadic functions for the system ABI `_ @@ -77,12 +75,23 @@ Language changes in Rust 1.93.0 - `Emit error when using some keyword as a cfg predicate `_ - - No change: this bug was not documented in FLS + - This bug was not documented in the FLS. - `Stabilize asm_cfg `_ - - Changed syntax: :s:`AssemblyCodeBlock`, :s:`AsmArguments`, :s:`GlobalAsmArguments` - - New syntax: :s:`AssemblyTemplate`, :s:`AssemblyAttributeRegisterArgument`, :s:`AssemblyAttributeAbiClobber`, :s:`AssemblyAttributeAssemblyOption` + - Changed syntax: + + - :s:`AssemblyCodeBlock` + - :s:`AsmArguments` + - :s:`GlobalAsmArguments` + + - New syntax: + + - :s:`AssemblyAttributeAbiClobber` + - :s:`AssemblyAttributeAssemblyOption` + - :s:`AssemblyAttributeRegisterArgument` + - :s:`AssemblyTemplate` + - New glossary entry: :t:`inline assembly argument` - New paragraphs: @@ -93,25 +102,27 @@ Language changes in Rust 1.93.0 - `During const-evaluation, support copying pointers byte-by-byte `_ - * No change: Already covered by the classification of :t:`[constant expression]s`. + - Already covered by the classification of :t:`[constant expression]s`. - `LUB coercions now correctly handle function item types, and functions with differing safeties `_ - `Allow const items that contain mutable references to static (which is *very* unsafe, but not *always* UB) `_ - * Removed paragraph: :p:`fls_ooOYxhVh8hZo` - * Removed paragraph: :p:`fls_zkNFeBLy80UA` - * Removed paragraph: :p:`fls_VhzGfnWg7YrG` - * Removed paragraph: :p:`fls_qC6L0km0ZMFI` - * Removed paragraph: :p:`fls_ibYKKQdB2tDn` - * Removed paragraph: :p:`fls_dQdSxf8kOgbi` + - Removed paragraphs: + + - :p:`fls_ooOYxhVh8hZo` + - :p:`fls_zkNFeBLy80UA` + - :p:`fls_VhzGfnWg7YrG` + - :p:`fls_qC6L0km0ZMFI` + - :p:`fls_ibYKKQdB2tDn` + - :p:`fls_dQdSxf8kOgbi` - `Add warn-by-default const_item_interior_mutations lint to warn against calls which mutate interior mutable const items `_ - - Lints are outside the scope of FLS + - Lints are outside the scope of the FLS. - `Add warn-by-default function_casts_as_integer lint `_ - - Lints are outside the scope of FLS + - Lints are outside the scope of the FLS. FLS corrections --------------- @@ -121,6 +132,7 @@ FLS corrections - Corrected glossary `discriminant type` paragraph ID: - old reused ID: ``fls_t4yeovFm83Wo`` - new unique ID: ``fls_kqdvWGi9cglm`` + - Corrected glossary `local trait` paragraph ID: - old reused ID: ``fls_I9JaKZelMiby`` - new unique ID: ``fls_H5vkbMFvzrFs`` @@ -130,39 +142,39 @@ Language changes in Rust 1.92.0 - `Document MaybeUninit representation and validity `_ - - This is not a language change + - This is not a language change. - `Allow "&raw [mut | const]" for union field in safe code `_ - - This lifted restriction was not specified in the FLS + - This lifted restriction was not documented in the FLS. - `Prefer item bounds of associated types over where-bounds for auto-traits and Sized `_ - - This is a fix for a regression that only existed in development versions of Rust (Beta and Nightly) + - 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 behavior was not documented in the FLS. - `Support combining #[track_caller] and #[no_mangle] (requires every declaration specifying #[track_caller] as well) `_ - - This lifted restriction was not documented in the FLS + - This lifted restriction was not documented in the FLS. - `Make never type lints never_type_fallback_flowing_into_unsafe and dependency_on_unit_never_type_fallback deny-by-default `_ - - Lints are not part of 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 + - 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 lifted restriction was not documented in the FLS. - `The unused_must_use lint no longer warns on "Result<(), Uninhabited>" (for instance, "Result<(), !>"), or "ControlFlow" `_. This avoids having to check for an error that can never happen. - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. Language changes in Rust 1.91.1 ------------------------------- @@ -239,66 +251,61 @@ Language changes in Rust 1.91.0 - `Add dangling_pointers_from_locals lint to warn against dangling pointers from local variables `_ - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Upgrade semicolon_in_expressions_from_macros from warn to deny `_ - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Stabilize LoongArch32 inline assembly `_ - - No change: the target is outside the scope of the FLS + - The target is outside the scope of the FLS - `Add warn-by-default integer_to_ptr_transmutes lint against integer-to-pointer transmutes `_ - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Stabilize 'sse4a' and 'tbm' target features `_ - Changed syntax: :s:`Feature` - * New paragraphs: + - New paragraphs: - :p:`fls_pGHKFrgGlFtg` - - :p:`fls_K6TM6oTLL1BA` - `Add 'target_env = "macabi"' and 'target_env = "sim"' cfgs `_ as replacements for the `target_abi` cfgs with the same values. - - No change: configuration options are environment-specific and not exhaustive + - Configuration options are environment-specific and not exhaustive. Language changes in Rust 1.90.0 ------------------------------- - `Split up the unknown_or_malformed_diagnostic_attributes lint `_ - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Allow constants whose final value has references to mutable/external memory, but reject such constants as patterns `_ - - This lifted restriction was not specified in the FLS - - The restriction on patterns is documented in :p:`fls_wJ9f906BlBvg` + - This lifted restriction was not documented in the FLS. + - The restriction on patterns is documented in :p:`fls_wJ9f906BlBvg`. + - New paragraph: :p:`fls_zyuxqty09SDO` - - Above paragraph replaces :p:`fls_6g7c1kjrmfnr` and :p:`fls_hkbwa8xx2fwx` + - Paragraph :p:`fls_zyuxqty09SDO` replaces :p:`fls_6g7c1kjrmfnr` and :p:`fls_hkbwa8xx2fwx`. - * New paragraphs: + - New paragraphs: - :p:`fls_ooOYxhVh8hZo` - - :p:`fls_zkNFeBLy80UA` - - :p:`fls_VhzGfnWg7YrG` - - :p:`fls_ibYKKQdB2tDn` - - :p:`fls_dQdSxf8kOgbi` - - :p:`fls_qC6L0km0ZMFI` - `Allow volatile access to non-Rust memory, including address 0 `_ - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. Language changes in Rust 1.89.0 ------------------------------- @@ -315,18 +322,16 @@ Language changes in Rust 1.89.0 - Changed paragraph: :p:`fls_imr2jx6cbuzq` - `Add a warn-by-default mismatched_lifetime_syntaxes lint `_. - This lint detects when the same lifetime is referred to by different syntax categories between function arguments and return values, which can be confusing to read, especially in unsafe code. - This lint supersedes the warn-by-default ``elided_named_lifetimes`` lint. - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Expand unpredictable_function_pointer_comparisons to also lint on function pointer comparisons in external macros `_ - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Make the dangerous_implicit_autorefs lint deny-by-default `_ - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Stabilize the avx512 target features `_ @@ -378,19 +383,19 @@ Language changes in Rust 1.89.0 - `Stabilize these LoongArch target features: f, d, frecipe, lasx, lbt, lsx, lvz `_ - - No change: the target is outside the scope of the FLS + - The target is outside the scope of the FLS. - `Remove i128 and u128 from improper_ctypes_definitions lint `_ - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Stabilize repr128 (#[repr(u128), #repr(i128)]) `_ - - No change: this was erroneously documented as if it were already true + - The FLS already documented the semantics. - `Allow #![doc(test(attr(..))) everywhere `_ - - No change: documentation tests are outside the scope of the FLS + - Documentation tests are outside the scope of the FLS. - `Extend temporary lifetime extension to also go through tuple struct and tuple variant constructors `_ @@ -406,52 +411,42 @@ Language changes in Rust 1.89.0 - `extern "C" functions on the wasm32-unknown-unknown target now have a standards compliant ABI `_ - - No change: the target is outside the scope of the FLS + - The target is outside the scope of the FLS. Language changes in Rust 1.88.0 ------------------------------- - `Stabilize let_chains feature in the 2024 edition `_ - - No change: the FLS only supports the 2021 edition + - The 2024 edition is outside the scope of the FLS. - `Stabilize naked_functions feature `_ - New sections: :ref:`fls_Sd6rUmpEb355` - - New paragraphs: - - - :p:`fls_eOJS3mxa9xgu` - - - :p:`fls_2oP2nbDPtUg7` - - - :p:`fls_y2wCBvXDtQK2` - - - :p:`fls_PEoOGTBjuEQc` - - - :p:`fls_vcB5xwgD6Ign` - - Changed paragraphs: - :p:`fls_3fg60jblx0xb` - - :p:`fls_ecteot716j8j` - - :p:`fls_tgzga1lanfuo` - - :p:`fls_g09kmp2a04g9` - - :p:`fls_nszx1gllufi2` - - New syntax: :s:`SymPathExpression` + - New paragraphs: - - Changed syntax: + - :p:`fls_eOJS3mxa9xgu` + - :p:`fls_2oP2nbDPtUg7` + - :p:`fls_y2wCBvXDtQK2` + - :p:`fls_PEoOGTBjuEQc` + - :p:`fls_vcB5xwgD6Ign` - - :s:`RegisterArgument` + - Changed syntax: - - :s:`RegisterExpression` + - :s:`BuiltinAttributeContent` + - :s:`RegisterArgument` + - :s:`RegisterExpression` - - :s:`BuiltinAttributeContent` + - New syntax: :s:`SymPathExpression` - `Stabilize cfg_boolean_literals feature `_ @@ -459,23 +454,23 @@ Language changes in Rust 1.88.0 - `Fully de-stabilize the #[bench] attribute `_ - - No change: this was an unstable feature and was therefore not specified in the FLS + - Unstable features are outside the scope of the FLS. - `Add warn-by-default dangerous_implicit_autorefs lint against implicit autoref of raw pointer dereference `_ - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Add invalid_null_arguments lint to prevent invalid usage of null pointers `_ - - No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Change trait impl candidate preference for builtin impls and trivial where-clauses. `_ - - No change: trait impl candidate preference is not specified in the FLS + - Trait impl candidate preferences of the compiler are outside the scope of the FLS. - `Check types of generic const parameter defaults `_ - - No change: this bug was not documented in the FLS + - This bug was not documented in the FLS. Language changes in Rust 1.87.0 ------------------------------- @@ -486,15 +481,15 @@ Language changes in Rust 1.87.0 - `Allow parsing open beginning ranges (..EXPR) after unary operators: ! - * `_ - - No change: this lifted restriction was not specified in the FLS + - 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 `_ - - No change: this lifted restriction was not specified in the FLS + - This lifted restriction was not documented in the FLS. - `Stabilize feature(precise_capturing_in_traits) allowing use<...> bounds on return position impl Trait in traits (RPITIT) `_ - - No change: this lifted restriction was not specified in the FLS + - This lifted restriction was not documented in the FLS. Language changes in Rust 1.86.0 ------------------------------- @@ -509,453 +504,539 @@ Language changes in Rust 1.86.0 - `The missing_abi lint now warns-by-default. `_ - - No change: Lints are not part of the FLS + - Lints are outside the scope of the FLS. - `Rust now lints about double negations, to catch cases that might have intended to be a prefix decrement operator (--x) as written in other languages. This was previously a clippy lint, clippy::double_neg, and is now available directly in Rust as double_negations. `_ - - No change: Lints are not part 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. `_ - - No change: The concrete semantics of constant evaluation is not described within the FLS + - The concrete semantics of constant evaluation is not described in the FLS. - `Empty repr() attribute applied to invalid items are now correctly rejected. `_ - - No change: this bug was not documented + - This bug was not documented in the FLS. - `Inner attributes, #![test] and #![rustfmt::skip], are no longer accepted in more places than intended. `_ - - No change: These attributes are not part of the FLS + - Tool-related attributes are outside the scope of the FLS. + - The incorrect semantics of ``#![test]`` were not documented in the FLS. Language changes in Rust 1.85.0 ------------------------------- -* `The 2024 Edition is now stable. `_ +- `The 2024 Edition is now stable. `_ - * No change: The FLS currently qualifies only the 2021 Edition + - The 2024 edition is outside the scope of the FLS. -* `Stabilize async closures `_ +- `Stabilize async closures `_ - * New paragraphs: :p:`fls_My6pMgpeFCFg`, :p:`fls_DSy7bPKGzyov` + - New paragraphs: + + - :p:`fls_My6pMgpeFCFg` + - :p:`fls_DSy7bPKGzyov` - * Changed syntax: :s:`ClosureExpression` + - Changed syntax: :s:`ClosureExpression` -* `Stabilize \`#[diagnostic::do_not_recommend]\` `_ +- `Stabilize \`#[diagnostic::do_not_recommend]\` `_ - * No change: tool attributes are not part of the FLS + - Tool-related attributes are outside the scope of the FLS. -* `Add \`unpredictable_function_pointer_comparisons\` lint to warn against function pointer comparisons `_ +- `Add \`unpredictable_function_pointer_comparisons\` lint to warn against function pointer comparisons `_ - * No change: Lints are not part of the FLS + - Lints are outside the scope of the FLS. -* `Lint on combining \`#[no_mangle]\` and \`#[export_name]\` attributes. `_ +- `Lint on combining \`#[no_mangle]\` and \`#[export_name]\` attributes. `_ - * No change: Lints are not part of the FLS + - Lints are outside the scope of the FLS. Language changes in Rust 1.84.0 ------------------------------- -* `Allow \`#[deny]\` inside \`#[forbid]\` as a no-op `_ +- `Allow \`#[deny]\` inside \`#[forbid]\` as a no-op `_ - * No change: Lints are not part of the FLS + - Lints are outside the scope of the FLS. -* `Show a warning when \`-Ctarget-feature\` is used to toggle features that can lead to unsoundness due to ABI mismatches `_ +- `Show a warning when \`-Ctarget-feature\` is used to toggle features that can lead to unsoundness due to ABI mismatches `_ - * No change: `target-feature` is outside the scope of the FLS + - Conforming tool usage is outside the scope of the FLS. -* `Use the next-generation trait solver in coherence `_ +- `Use the next-generation trait solver in coherence `_ - * No change: the exact trait solver is not part of the FLS + - The trait solver is outside the scope of the FLS. -* `Allow coercions to drop the principal of trait objects `_ +- `Allow coercions to drop the principal of trait objects `_ - * Changed paragraph: :p:`fls_SYnFJBhi0IWj` + - Changed paragraph: :p:`fls_SYnFJBhi0IWj` -* `Support \`/\` as the path separator for \`include!()\` in all cases on Windows `_ +- `Support \`/\` as the path separator for \`include!()\` in all cases on Windows `_ - * No change: This past restriction of the `include` macro is not specified by the FLS + - 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 `_ +- `Taking a raw ref (\`raw (const|mut)\`) of a deref of a pointer (\`*ptr\`) is now safe `_ - * Changed paragraph: :p:`fls_8i4jzksxlrw0` + - Changed paragraph: :p:`fls_8i4jzksxlrw0` -* `Stabilize s390x inline assembly `_ +- `Stabilize s390x inline assembly `_ - * No change: These changes affect content that is informational + - This target is outside the scope of the FLS. -* `Stabilize Arm64EC inline assembly `_ +- `Stabilize Arm64EC inline assembly `_ - * No change: These changes affect content that is informational + - This target is outside the scope of the FLS. -* `Lint against creating pointers to immediately dropped temporaries `_ +- `Lint against creating pointers to immediately dropped temporaries `_ - * No change: Lints are not part of the FLS + - Lints are outside the scope of the FLS. -* `Execute drop glue when unwinding in an \`extern "C"\` function `_ +- `Execute drop glue when unwinding in an \`extern "C"\` function `_ - * No change: This lifted restriction was not specified in the FLS + - This lifted restriction was not documented in the FLS. Language changes in Rust 1.83.0 ------------------------------- -* `Stabilize \`&mut\`, \`*mut\`, \`&Cell\`, and \`*const Cell\` in const. `_ +- `Stabilize \`&mut\`, \`*mut\`, \`&Cell\`, and \`*const Cell\` in const. `_ - * Changed paragraphs: :p:`fls_to4e7imq2c0w`, :p:`fls_6g7c1kjrmfnr`, :p:`fls_hkbwa8xx2fwx` + - Changed paragraphs: + + - :p:`fls_to4e7imq2c0w` + - :p:`fls_6g7c1kjrmfnr` + - :p:`fls_hkbwa8xx2fwx` - * Removed paragraph: :p:`fls_ox6sgl9n43g2` + - Removed paragraph: :p:`fls_ox6sgl9n43g2` -* `Allow creating references to statics in \`const\` initializers. `_ +- `Allow creating references to statics in \`const\` initializers. `_ - * No change: This previous restriction is not specified in the FLS + - This lifted restriction was not documented in the FLS. -* `Implement raw lifetimes and labels (\`'r#ident\`). `_ +- `Implement raw lifetimes and labels (\`'r#ident\`). `_ - * Changed syntax: :s:`Lifetime` + - Changed syntax: :s:`Lifetime` -* `Define behavior when atomic and non-atomic reads race. `_ +- `Define behavior when atomic and non-atomic reads race. `_ - * No change: Already covered by the definition of :t:`data race`. + - Already covered by the definition of :t:`data race`. -* `Non-exhaustive structs may now be empty. `_ +- `Non-exhaustive structs may now be empty. `_ - * Removed paragraph: :p:`fls_2CWUWbYT9KcT` + - Changed paragraphs: + + - :p:`fls_fSNrRsgzLd0E` + - :p:`fls_S9QL6yVF5LFI` - * Changed paragraph: :p:`fls_fSNrRsgzLd0E`, :p:`fls_S9QL6yVF5LFI` + - Removed paragraph: :p:`fls_2CWUWbYT9KcT` -* `Disallow implicit coercions from places of type \`!\` `_ +- `Disallow implicit coercions from places of type \`!\` `_ - * No change: The FLS does not specify type inference to such a degree + - The FLS does not specify type inference to such a degree. -* `\`const extern\` functions can now be defined for other calling conventions. `_ +- `\`const extern\` functions can now be defined for other calling conventions. `_ - * No change: This previous restriction is not specified in the FLS + - This lifted restriction was not documented in the FLS. -* `Stabilize \`expr_2021\` macro fragment specifier in all editions. `_ +- `Stabilize \`expr_2021\` macro fragment specifier in all editions. `_ - * Changed syntax: :s:`MacroFragmentSpecifier` + - Changed syntax: :s:`MacroFragmentSpecifier` - * Changed paragraphs: :p:`fls_k00bck2k8tde`, :p:`fls_PxR9vNHsaFnI` + - Changed paragraphs: + + - :p:`fls_k00bck2k8tde` + - :p:`fls_PxR9vNHsaFnI` -* `The \`non_local_definitions\` lint now fires on less code and warns by default. `_ +- `The \`non_local_definitions\` lint now fires on less code and warns by default. `_ - * No change: Lints are not part of the FLS + - Lints are outside the scope of the FLS. Language changes in Rust 1.82.0 ------------------------------- -* `Don't make statement nonterminals match pattern nonterminals `_ +- `Don't make statement nonterminals match pattern nonterminals `_ - * No change: Exact parsing behavior of non-terminals within declarative macros is not specified + - 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 `_ +- `Patterns matching empty types can now be omitted in common cases `_ - * New section: :ref:`fls_mcxF9y5u66sZ` + - New section: :ref:`fls_mcxF9y5u66sZ` - * Changed paragraphs: :p:`fls_9fjspnefoyvz`, :p:`fls_uq7ftuuq1sig`, :p:`fls_cfoy86mkmqa4`, :p:`fls_rnppz6y5z8pi`, :p:`fls_x0bmzl1315gq`, :p:`fls_MK83WE0iDqNf` + - Changed paragraphs: + + - :p:`fls_9fjspnefoyvz` + - :p:`fls_uq7ftuuq1sig` + - :p:`fls_cfoy86mkmqa4` + - :p:`fls_rnppz6y5z8pi` + - :p:`fls_x0bmzl1315gq` + - :p:`fls_MK83WE0iDqNf` -* `Enforce supertrait outlives obligations when using trait impls `_ +- `Enforce supertrait outlives obligations when using trait impls `_ - * No change: the concrete type inference resolution is not part of the FLS + - The FLS does not specify type inference to such a degree. -* `\`addr_of(_mut)!\` macros and the newly stabilized \`&raw (const|mut)\` are now safe to use with all static items `_ +- `\`addr_of(_mut)!\` macros and the newly stabilized \`&raw (const|mut)\` are now safe to use with all static items `_ - * No change: `addr_of` is not specified as it is a library defined macro, `&raw (const|mut)` appears as a new feature separately below + - 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 `_ +- `size_of_val_raw: for length 0 this is safe to call `_ - * No change: `size_of_val_raw` is a library defined function + - Library-defined functions are outside the scope of the FLS. -* `Reorder trait bound modifiers *after* \`for<...>\` binder in trait bounds `_ +- `Reorder trait bound modifiers *after* \`for<...>\` binder in trait bounds `_ - * Changed syntax: :s:`TraitBound` + - Changed syntax: :s:`TraitBound` -* `Stabilize opaque type precise capturing (RFC 3617) `_ +- `Stabilize opaque type precise capturing (RFC 3617) `_ - * Changed syntax: :s:`ImplTraitTypeSpecification`, :s:`ImplTraitTypeSpecificationOneBound` + - Changed syntax: + + - :s:`ImplTraitTypeSpecification` + - :s:`ImplTraitTypeSpecificationOneBound` - * New syntax: :s:`UseCaptures`, :s:`UseCapturesGenericArgs`, :s:`UseCapturesGenericArg` + - New syntax: + + - :s:`UseCaptures` + - :s:`UseCapturesGenericArgs` + - :s:`UseCapturesGenericArg` - * New paragraphs: :p:`fls_69hqMjvNno9u`, :p:`fls_OnyR0Wsfk7KI`, :p:`fls_KgH6c5cC4S0G`, :p:`fls_iT9WCNfUZQnC` + - New paragraphs: + + - :p:`fls_69hqMjvNno9u` + - :p:`fls_OnyR0Wsfk7KI` + - :p:`fls_KgH6c5cC4S0G` + - :p:`fls_iT9WCNfUZQnC` -* `Stabilize \`&raw const\` and \`&raw mut\` operators (RFC 2582) `_ +- `Stabilize \`&raw const\` and \`&raw mut\` operators (RFC 2582) `_ - * New section: :ref:`fls_vXGuvRWOLbEE` + - New section: :ref:`fls_vXGuvRWOLbEE` - * New paragraphs: :p:`fls_K7SbApHPmwjM` + - New paragraph: :p:`fls_K7SbApHPmwjM` -* `Stabilize unsafe extern blocks (RFC 3484) `_ +- `Stabilize unsafe extern blocks (RFC 3484) `_ - * New syntax: :s:`ItemSafety` + - New syntax: :s:`ItemSafety` - * Changed syntax: :s:`WeakKeyword`, :s:`FunctionQualifierList`, :s:`StaticDeclaration` + - Changed syntax: - * New paragraphs: :p:`fls_8ltVLtAfvy0m`, :p:`fls_WRpcVF1fLEpr`, :p:`fls_nUADhgcfvvGC` + - :s:`FunctionQualifierList` + - :s:`StaticDeclaration` + - :s:`WeakKeyword` - * Changed paragraphs: :p:`fls_g0JEluWqBpNc`, :p:`fls_7ucwmzqtittv`, :p:`fls_4dje9t5y2dia`, :p:`fls_l88r9fj82650`, :p:`fls_fo9with6xumo` + - Changed paragraphs: + + - :p:`fls_g0JEluWqBpNc` + - :p:`fls_7ucwmzqtittv` + - :p:`fls_4dje9t5y2dia` + - :p:`fls_l88r9fj82650` + - :p:`fls_fo9with6xumo` - * Removed paragraph :p:`fls_iaimuqcclstl` + - New paragraphs: + + - :p:`fls_8ltVLtAfvy0m` + - :p:`fls_WRpcVF1fLEpr` + - :p:`fls_nUADhgcfvvGC` -* `Stabilize nested field access in \`offset_of!\` `_ + - Removed paragraph :p:`fls_iaimuqcclstl` - * No change: `offset_of` is a library defined macro +- `Stabilize nested field access in \`offset_of!\` `_ -* `Do not require \`T\` to be live when dropping \`[T; 0]\` `_ + - Library-defined macros are outside the scope of the FLS. - * No change: The drop interaction with the borrow checker is not specified as the borrow checker is not specified in the FLS +- `Do not require \`T\` to be live when dropping \`[T; 0]\` `_ -* `Stabilize \`const\` operands in inline assembly `_ + - The mechanics of the borrow checker are outside the scope of the FLS. - * Note: These changes affect content that is informational. +- `Stabilize \`const\` operands in inline assembly `_ - * New syntax: :s:`ConstRegisterExpression` + - New syntax: :s:`ConstRegisterExpression` - * New paragraphs: :p:`fls_81Ju1TEqJ48K`, :p:`fls_j9XOoXDmN5Dq`, :p:`fls_jU8zg4k8dFsY` + - New paragraphs: + + - :p:`fls_81Ju1TEqJ48K` + - :p:`fls_j9XOoXDmN5Dq` + - :p:`fls_jU8zg4k8dFsY` -* `Stabilize floating-point arithmetic in \`const fn\` `_ +- `Stabilize floating-point arithmetic in \`const fn\` `_ - * New paragraph: :p:`fls_lSxXWxJn0vMO` + - New paragraph: :p:`fls_lSxXWxJn0vMO` - * Removed paragraph: :p:`fls_9mrrosm8jnn7` + - Removed paragraph: :p:`fls_9mrrosm8jnn7` -* `Stabilize explicit opt-in to unsafe attributes `_ +- `Stabilize explicit opt-in to unsafe attributes `_ - * New section: :ref:`fls_19LnTi3WabFd` + - New section: :ref:`fls_19LnTi3WabFd` -* `Document NaN bit patterns guarantees `_ +- `Document NaN bit patterns guarantees `_ - * New paragraph: :p:`fls_nuFAwLHOdQBx` + - New paragraph: :p:`fls_nuFAwLHOdQBx` Language changes in Rust 1.81.0 ------------------------------- -* `Abort on uncaught panics in \`extern "C"\` functions. `_ +- `Abort on uncaught panics in \`extern "C"\` functions. `_ - * No change: unwinding is not specified in the FLS + - The mechanics of unwinding are outside the scope of the FLS. -* `Fix ambiguous cases of multiple \`&\` in elided self lifetimes. `_ +- `Fix ambiguous cases of multiple \`&\` in elided self lifetimes. `_ - * Changed paragraph: :p:`fls_crb6m6b3cdwh` + - Changed paragraph: :p:`fls_crb6m6b3cdwh` - * New paragraph: :p:`fls_d4u3y82hdadc` + - New paragraph: :p:`fls_d4u3y82hdadc` -* `Stabilize \`#[expect]\` for lints (RFC 2383), like \`#[allow]\` with a warning if the lint is _not_ fulfilled. `_ +- `Stabilize \`#[expect]\` for lints (RFC 2383), like \`#[allow]\` with a warning if the lint is _not_ fulfilled. `_ - * New paragraph: :p:`fls_NrTL2FruARAv` + - New paragraph: :p:`fls_NrTL2FruARAv` -* `Change method resolution to constrain hidden types instead of rejecting method candidates. `_ +- `Change method resolution to constrain hidden types instead of rejecting method candidates. `_ - * No change: the concrete type inference resolution is not part of the FLS + - The FLS does not specify type inference to such a degree. -* `Bump \`elided_lifetimes_in_associated_constant\` to deny. `_ +- `Bump \`elided_lifetimes_in_associated_constant\` to deny. `_ - * No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. -* `\`offset_from\`: always allow pointers to point to the same address. `_ +- `\`offset_from\`: always allow pointers to point to the same address. `_ - * No change: this previous restriction is not specified in the FLS + - This lifted restriction was not documented in the FLS. -* `Allow constraining opaque types during subtyping in the trait system. `_ +- `Allow constraining opaque types during subtyping in the trait system. `_ - * No change: the concrete type inference resolution is not part of the FLS + - The FLS does not specify type inference to such a degree. -* `Allow constraining opaque types during various unsizing casts. `_ +- `Allow constraining opaque types during various unsizing casts. `_ - * No change: the concrete type inference resolution is not part of the FLS + - The FLS does not specify type inference to such a degree. -* `Deny keyword lifetimes pre-expansion. `_ +- `Deny keyword lifetimes pre-expansion. `_ - * No change: the FLS already specifies this restriction in :s:`Lifetime` + - No change: the FLS already specifies this restriction in :s:`Lifetime` Language changes in Rust 1.80.0 ------------------------------- -* `Document maximum allocation size `_ +- `Document maximum allocation size `_ - * New paragraphs: :p:`fls_CUJyMj0Sj8NS`, :p:`fls_kaomYy0Ml4Nh`, :p:`fls_B5cmkWfD5GNt`, :p:`fls_oqhQ62mDLckN`, :p:`fls_uhwpuv6cx4ip`, :p:`fls_xuuFKmm181bs` + - New paragraphs: + + - :p:`fls_CUJyMj0Sj8NS` + - :p:`fls_kaomYy0Ml4Nh` + - :p:`fls_B5cmkWfD5GNt` + - :p:`fls_oqhQ62mDLckN` + - :p:`fls_uhwpuv6cx4ip` + - :p:`fls_xuuFKmm181bs` -* `Allow zero-byte offsets and ZST read/writes on arbitrary pointers `_ +- `Allow zero-byte offsets and ZST read/writes on arbitrary pointers `_ - * No change: this previous restriction is not specified in the FLS + - This lifted restriction was not documented in the FLS. -* `Support C23's variadics without a named parameter `_ +- `Support C23's variadics without a named parameter `_ - * No change: this previous restriction is not specified in the FLS + - This lifted restriction was not documented in the FLS. -* `Stabilize \`exclusive_range_pattern\` feature `_ +- `Stabilize \`exclusive_range_pattern\` feature `_ - * Changed syntax: :s:`RangePattern` + - Changed syntax: :s:`RangePattern` - * New syntax: :s:`ExclusiveRangePattern` + - New syntax: :s:`ExclusiveRangePattern` - * Changed paragraph: :p:`fls_8Q6NfRx4j5V7` + - Changed paragraph: :p:`fls_8Q6NfRx4j5V7` - * New paragraphs: :p:`fls_3PyquOKjA7SI`, :p:`fls_8bdOqkO1NuJW`, :p:`fls_EDL1Pi56KQ2H` + - New paragraphs: + + - :p:`fls_3PyquOKjA7SI` + - :p:`fls_8bdOqkO1NuJW` + - :p:`fls_EDL1Pi56KQ2H` Language changes in Rust 1.79.0 ------------------------------- -* `Stabilize inline \`const {}\` expressions. `_ +- `Stabilize inline \`const {}\` expressions. `_ + + - New section: :ref:`fls_G59PiNQkVUnQ` + +- `Prevent opaque types being instantiated twice with different regions within the same function. `_ + + - Already described in :p:`fls_hza5n5eb18ta`. - * New section: :ref:`fls_G59PiNQkVUnQ` +- `Stabilize WebAssembly target features that are in phase 4 and 5. `_ -* `Prevent opaque types being instantiated twice with different regions within the same function. `_ + - This target is outside the scope of the FLS. - * No change: already described in :p:`fls_hza5n5eb18ta` +- `Add the \`redundant_lifetimes\` lint to detect lifetimes which are semantically redundant. `_ -* `Stabilize WebAssembly target features that are in phase 4 and 5. `_ + - Lints are outside the scope of the FLS. - * No change: ``cfg`` and ``cfg_attr`` configuration predicates are not part of the FLS +- `Stabilize the \`unnameable_types\` lint for public types that can't be named. `_ -* `Add the \`redundant_lifetimes\` lint to detect lifetimes which are semantically redundant. `_ + - Lints are outside the scope of the FLS. - * No change: lints are not part of the FLS +- `Enable debuginfo in macros, and stabilize \`-C collapse-macro-debuginfo\` and \`#[collapse_debuginfo]\`. `_ -* `Stabilize the \`unnameable_types\` lint for public types that can't be named. `_ + - New section: :ref:`fls_qyudjGHZfyJH` - * No change: lints are not part of the FLS +- `Propagate temporary lifetime extension into \`if\` and \`match\` expressions. `_ -* `Enable debuginfo in macros, and stabilize \`-C collapse-macro-debuginfo\` and \`#[collapse_debuginfo]\`. `_ + - New paragraphs: + + - :p:`fls_Rj9zhVutfQod` + - :p:`fls_oodpp3LpXC13` + - :p:`fls_xGThCPoTUSAi` + +- `Restrict promotion of \`const fn\` calls. `_ - * New section: :ref:`fls_qyudjGHZfyJH` + - Already described in :p:`fls_3h5vr7xk2rrt`. -* `Propagate temporary lifetime extension into \`if\` and \`match\` expressions. `_ +- `Warn against refining impls of crate-private traits with \`refining_impl_trait\` lint. `_ - * New paragraphs: :p:`fls_Rj9zhVutfQod`, :p:`fls_oodpp3LpXC13`, :p:`fls_xGThCPoTUSAi` + - Lints are outside the scope of the FLS. -* `Restrict promotion of \`const fn\` calls. `_ +- `Stabilize associated type bounds (RFC 2289). `_ - * No change: already described in :p:`fls_3h5vr7xk2rrt` + - New paragraph: :p:`fls_mcUMWsYcxzmZ` -* `Warn against refining impls of crate-private traits with \`refining_impl_trait\` lint. `_ +- `Stabilize importing \`main\` from other modules or crates. `_ - * No change: lints are not part of the FLS + - This lifted restriction was not documented in the FLS. -* `Stabilize associated type bounds (RFC 2289). `_ + - 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 paragraph: :p:`fls_mcUMWsYcxzmZ` + - New section: :ref:`fls_8JB3SJqamdpU` -* `Stabilize importing \`main\` from other modules or crates. `_ + - Changed glossary entries: + + - :t:`binary crate` + - :t:`library crate` + - :t:`proc-macro crate` - * No change: this lifted restriction was not previously described in the FLS + - New glossary entry: :t:`crate type` - * While updating the FLS to account for this feature, we realized that the - way the FLS described crate types was incorrect. We rectified this: + - Changed paragraphs: + + - :p:`fls_9ub6ks8qrang` + - :p:`fls_Mf62VqAhoZ3c` + - :p:`fls_d9nn4yuiw1ja` - * New section: :ref:`fls_8JB3SJqamdpU` - * New glossary entry: :t:`crate type` - * New paragraphs: :p:`fls_unxalgMqIr3v`, :p:`fls_e7jGvXvTsFpC`, :p:`fls_kQiJPwb2Hjcc`, :p:`fls_OyFwBtDGVimT` - * Updated glossary entries: :t:`binary crate`, :t:`library crate`, :t:`proc-macro crate` - * Updated paragraphs: :p:`fls_9ub6ks8qrang`, :p:`fls_Mf62VqAhoZ3c`, :p:`fls_d9nn4yuiw1ja` - * Moved paragraph: :p:`fls_sbGnkm8Ephiu` + - New paragraphs: + + - :p:`fls_unxalgMqIr3v` + - :p:`fls_e7jGvXvTsFpC` + - :p:`fls_kQiJPwb2Hjcc` + - :p:`fls_OyFwBtDGVimT` -* `Check return types of function types for well-formedness `_ + - Moved paragraph: :p:`fls_sbGnkm8Ephiu` - * No change: the exact trait resolution implementation is not part of the FLS +- `Check return types of function types for well-formedness `_ -* `Rework \`impl Trait\` lifetime inference `_ + - The mechanism of trait resolution is outside the scope of the FLS. - * New paragraphs: :p:`fls_3aKZB0ILIkZw`, :p:`fls_Xo1ODwOyX7Vm`, :p:`fls_kTGFLFymTWch` +- `Rework \`impl Trait\` lifetime inference `_ + + - New paragraphs: + + - :p:`fls_3aKZB0ILIkZw` + - :p:`fls_Xo1ODwOyX7Vm` + - :p:`fls_kTGFLFymTWch` -* `Change inductive trait solver cycles to be ambiguous `_ +- `Change inductive trait solver cycles to be ambiguous `_ - * No change: the exact trait solver is not part of the FLS + - The trait solver is outside the scope of the FLS. Language changes in Rust 1.78.0 ------------------------------- -* `Stabilize \`#[cfg(target_abi = ...)]\` `_ +- `Stabilize \`#[cfg(target_abi = ...)]\` `_ - * No change: ``cfg`` and ``cfg_attr`` configuration predicates are not part of the FLS + - Configuration options are outside the scope of the FLS. -* `Stabilize the \`#[diagnostic]\` namespace and \`#[diagnostic::on_unimplemented]\` attribute `_ +- `Stabilize the \`#[diagnostic]\` namespace and \`#[diagnostic::on_unimplemented]\` attribute `_ - * No change: tool attributes are not part of the FLS + - Tool-related attributes are outside the scope of the FLS. -* `Make async-fn-in-trait implementable with concrete signatures `_ +- `Make async-fn-in-trait implementable with concrete signatures `_ - * No change: no paragraph in the FLS forbids this prior incompatability + - The FLS already documented the semantics. -* `Make matching on NaN a hard error, and remove the rest of \`illegal_floating_point_literal_pattern\` `_ +- `Make matching on NaN a hard error, and remove the rest of \`illegal_floating_point_literal_pattern\` `_ - * New paragraph: :p:`fls_JP8YSbxSN0Ym` + - New paragraph: :p:`fls_JP8YSbxSN0Ym` -* `static mut: allow mutable reference to arbitrary types, not just slices and arrays `_ +- `static mut: allow mutable reference to arbitrary types, not just slices and arrays `_ - * No change: this lifted restriction was not previously described in the FLS + - This lifted restriction was not documented in the FLS. -* `Extend \`invalid_reference_casting\` to include references casting to bigger memory layout `_ +- `Extend \`invalid_reference_casting\` to include references casting to bigger memory layout `_ - * No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. -* `Add \`non_contiguous_range_endpoints\` lint for singleton gaps after exclusive ranges `_ +- `Add \`non_contiguous_range_endpoints\` lint for singleton gaps after exclusive ranges `_ - * No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. -* `Add \`wasm_c_abi\` lint for use of older wasm-bindgen versions `_ +- `Add \`wasm_c_abi\` lint for use of older wasm-bindgen versions `_ - * No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. -* `Update \`indirect_structural_match\` and \`pointer_structural_match\` lints to match RFC `_ +- `Update \`indirect_structural_match\` and \`pointer_structural_match\` lints to match RFC `_ - * No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. -* `Make non-\`PartialEq\`-typed consts as patterns a hard error `_ +- `Make non-\`PartialEq\`-typed consts as patterns a hard error `_ - * No change: already described in :p:`fls_zCswsyuitexI` + - Already described in :p:`fls_zCswsyuitexI`. -* `Split \`refining_impl_trait\` lint into \`_reachable\`, \`_internal\` variants `_ +- `Split \`refining_impl_trait\` lint into \`_reachable\`, \`_internal\` variants `_ - * No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. -* `Remove unnecessary type inference when using associated types inside of higher ranked \`where\`-bounds `_ +- `Remove unnecessary type inference when using associated types inside of higher ranked \`where\`-bounds `_ - * No change: the FLS does not specify type inference to such a degree + - The FLS does not document type inference to such a degree. -* `Weaken eager detection of cyclic types during type inference `_ +- `Weaken eager detection of cyclic types during type inference `_ - * No change: the FLS does not specify type inference to such a degree + - The FLS does not specify type inference to such a degree. -* `\`trait Trait: Auto {}\`: allow upcasting from \`dyn Trait\` to \`dyn Trait + Auto\` `_ +- `\`trait Trait: Auto {}\`: allow upcasting from \`dyn Trait\` to \`dyn Trait + Auto\` `_ - * New paragraph: :p:`fls_SYnFJBhi0IWj` + - New paragraph: :p:`fls_SYnFJBhi0IWj` language changes in Rust 1.77.0 ------------------------------- -* `Reveal opaque types within the defining body for exhaustiveness checking. `_ +- `Reveal opaque types within the defining body for exhaustiveness checking. `_ - * No change: the FLS does not specify introspection of the concrete type of the match expression scrutinee to such a degree + - Concrete type introspection is outside the scope of the FLS. -* `Stabilize C-string literals. `_ +- `Stabilize C-string literals. `_ - * New section: :ref:`fls_U1gHCy16emVe` + - New section: :ref:`fls_U1gHCy16emVe` -* `Stabilize THIR unsafeck. `_ +- `Stabilize THIR unsafeck. `_ - * No change: not a language change + - This is not a language change. -* `Add lint \`static_mut_refs\` to warn on references to mutable statics. `_ +- `Add lint \`static_mut_refs\` to warn on references to mutable statics. `_ - * No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. -* `Support async recursive calls (as long as they have indirection). `_ +- `Support async recursive calls (as long as they have indirection). `_ - * No change: this lifted restriction was not previously described in the FLS + - This lifted restriction was not documented in the FLS. -* `Undeprecate lint \`unstable_features\` and make use of it in the compiler. `_ +- `Undeprecate lint \`unstable_features\` and make use of it in the compiler. `_ - * No change: lints are not part of the FLS + - Lints are outside the scope of the FLS. -* `Make inductive cycles in coherence ambiguous always. `_ +- `Make inductive cycles in coherence ambiguous always. `_ - * No change: the FLS does not describe the trait solver to such a degree + - 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. +- `Get rid of type-driven traversal in const-eval interning `_, only as a `future compatibility lint `_ for now. - * No change: this lifted restriction was not previously described in the FLS + - This lifted restriction was not documented in the FLS. -* `Deny braced macro invocations in let-else. `_ +- `Deny braced macro invocations in let-else. `_ - * New paragraph: :p:`fls_1s1UikGU5YQb` + - New paragraph: :p:`fls_1s1UikGU5YQb` .. _release notes: https://doc.rust-lang.org/releases.html