Skip to content
Open
33 changes: 33 additions & 0 deletions src/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,37 @@ with the change that has been applied due to it.
just the language changes that had an impact to the FLS. See the `release
notes`_ for a full list of changes.

Language changes in Rust 1.90.0
-------------------------------

- `Split up the unknown_or_malformed_diagnostic_attributes lint <https://github.com/rust-lang/rust/pull/140717>`_

- No change: lints are not part of the FLS

- `Allow constants whose final value has references to mutable/external memory, but reject such constants as patterns <https://github.com/rust-lang/rust/pull/140942>`_

- This lifted restriction was not specified 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`

* New paragraphs:

- :p:`fls_ooOYxhVh8hZo`

- :p:`fls_zkNFeBLy80UA`

- :p:`fls_VhzGfnWg7YrG`

- :p:`fls_ibYKKQdB2tDn`

- :p:`fls_dQdSxf8kOgbi`

- `Allow volatile access to non-Rust memory, including address 0 <https://github.com/rust-lang/rust/pull/141260>`_

- No change: lints are not part of the FLS

Language changes in Rust 1.89.0
-------------------------------

Expand Down Expand Up @@ -317,6 +348,8 @@ Language changes in Rust 1.83.0

* Changed paragraphs: :p:`fls_to4e7imq2c0w`, :p:`fls_6g7c1kjrmfnr`, :p:`fls_hkbwa8xx2fwx`

* Removed paragraph: :p:`fls_ox6sgl9n43g2`

* `Allow creating references to statics in \`const\` initializers. <https://github.com/rust-lang/rust/pull/129759>`_

* No change: This previous restriction is not specified in the FLS
Expand Down
16 changes: 6 additions & 10 deletions src/expressions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,6 @@ involve :t:`[type]s` that require :t:`destruction`:
* :dp:`fls_b5fraqx07wuo`
:t:`[If let expression]s`,

* :dp:`fls_6g7c1kjrmfnr`
:t:`[Immutable borrow expression]s`.

* :dp:`fls_rpapnm3afan8`
:t:`[Index expression]s`,

Expand Down Expand Up @@ -248,9 +245,6 @@ involve :t:`[type]s` that require :t:`destruction`:
* :dp:`fls_3bucpdj828bq`
:t:`[Range expression]s`,

* :dp:`fls_hkbwa8xx2fwx`
:t:`[Borrow]s`,

* :dp:`fls_fobs8ebt7dhc`
:t:`[Struct expression]s`,

Expand All @@ -271,6 +265,12 @@ involve :t:`[type]s` that require :t:`destruction`:
* :dp:`fls_qvofy4wkql0s`
:t:`[While loop expression]s`.

* :dp:`fls_zyuxqty09SDO`
All forms of :t:`[borrow]s` except those of expressions that are subject to
:t:`drop scope extension` to the end of the program
and which are either :t:`[mutable borrow]s`
or borrows of expressions that result in values with :t:`interior mutability`.

:dp:`fls_3i7efddbsmn0`
An :t:`expression` is not considered a :t:`constant expression` when it
explicitly invokes an :t:`associated trait function` or uses
Expand Down Expand Up @@ -312,10 +312,6 @@ A :t:`constant context` is a :t:`construct` that requires a
* :dp:`fls_ucFupTeCyylb`
The :t:`block expression` of a :t:`const block expression`.

:dp:`fls_ox6sgl9n43g2`
It is a static error to create a :t:`mutable reference` in a
:t:`constant context`.

:dp:`fls_od0h3v40kjp6`
An invocation of the :std:`core::ptr::addr_of` :t:`macro` expands to a
:t:`constant expression` allowed in any :t:`constant context` and
Expand Down
6 changes: 6 additions & 0 deletions src/patterns.rst
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,12 @@ When a :t:`path pattern` refers to an :t:`associated constant` or a
:t:`constant`, the :t:`type` of the :t:`associated constant` or :t:`constant`
shall be :t:`structurally equal`.

:dp:`fls_wJ9f906BlBvg`
When a :t:`path pattern` refers to an :t:`associated constant` or a
:t:`constant`, the :t:`constant` must not contain any references to
:t:`[mutable static]s`, :t:`[static]s` with :t:`interior mutability`,
or :t:`[external static]s`.

:dp:`fls_hF19K8sWU8FF`
When the type of the :t:`path pattern` is of an :t:`enum type` or
:t:`struct type`, then the :t:`enum type` or :t:`struct type` shall be subject
Expand Down
16 changes: 16 additions & 0 deletions src/values.rst
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,22 @@ The :t:`expression` of a :t:`constant initializer` shall be a
The value of a :t:`constant` is determined by evaluating its
:t:`constant initializer`.

:dp:`fls_ooOYxhVh8hZo`
After :t:`type coercion`, the value of the constant cannot contain any
:t:`[mutable reference]s`, except when

- :dp:`fls_zkNFeBLy80UA`
The :t:`mutable reference` is contained within an :t:`external static`, or

- :dp:`fls_VhzGfnWg7YrG`
The :t:`mutable reference` is contained within a :t:`mutable static`, or

- :dp:`fls_ibYKKQdB2tDn`
The :t:`mutable reference` is contained within an :t:`union`, or

- :dp:`fls_dQdSxf8kOgbi`
The :t:`referent` is a value of a :t:`zero-sized type`.

.. rubric:: Dynamic Semantics

:dp:`fls_xezt9hl069h4`
Expand Down
2 changes: 1 addition & 1 deletion version.rst
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.. SPDX-License-Identifier: MIT OR Apache-2.0
SPDX-FileCopyrightText: The Ferrocene Developers
SPDX-FileCopyrightText: The Rust Project Developers
.. |spec_version| replace:: 1.88.0
.. |spec_version| replace:: 1.90.0