Recommended update for rust, rust1.81

Announcement ID: SUSE-RU-2024:3406-1
Rating: moderate
References:
Affected Products:
  • Development Tools Module 15-SP5
  • Development Tools Module 15-SP6
  • openSUSE Leap 15.5
  • openSUSE Leap 15.6
  • SUSE Linux Enterprise Desktop 15 SP5
  • SUSE Linux Enterprise Desktop 15 SP6
  • SUSE Linux Enterprise High Performance Computing 15 SP5
  • SUSE Linux Enterprise Real Time 15 SP5
  • SUSE Linux Enterprise Real Time 15 SP6
  • SUSE Linux Enterprise Server 15 SP5
  • SUSE Linux Enterprise Server 15 SP6
  • SUSE Linux Enterprise Server for SAP Applications 15 SP5
  • SUSE Linux Enterprise Server for SAP Applications 15 SP6

An update that contains one feature can now be installed.

Description:

This update for rust, rust1.81 fixes the following issues:

Changes in rust1.81:

  • Resolve wasm32-wasi build issues

Version 1.81.0 (2024-09-05)

Language

  • Abort on uncaught panics in extern "C" functions.
  • Fix ambiguous cases of multiple & in elided self lifetimes.
  • Stabilize #[expect] for lints (RFC 2383), like #[allow] with a warning if the lint is not fulfilled.
  • Change method resolution to constrain hidden types instead of rejecting method candidates.
  • Bump elided_lifetimes_in_associated_constant to deny.
  • offset_from: always allow pointers to point to the same address.
  • Allow constraining opaque types during subtyping in the trait system.
  • Allow constraining opaque types during various unsizing casts.
  • Deny keyword lifetimes pre-expansion.

Compiler

  • Make casts of pointers to trait objects stricter.
  • Check alias args for well-formedness even if they have escaping bound vars.
  • Deprecate no-op codegen option -Cinline-threshold=....
  • Re-implement a type-size based limit.
  • Properly account for alignment in transmute size checks.
  • Remove the box_pointers lint.
  • Ensure the interpreter checks bool/char for validity when they are used in a cast.
  • Improve coverage instrumentation for functions containing nested items.
  • Target changes:
  • Add Tier 3 no_std Xtensa targets: xtensa-esp32-none-elf, xtensa-esp32s2-none-elf, xtensa-esp32s3-none-elf
  • Add Tier 3 std Xtensa targets: xtensa-esp32-espidf, xtensa-esp32s2-espidf, xtensa-esp32s3-espidf
  • Add Tier 3 i686 Redox OS target: i686-unknown-redox
  • Promote arm64ec-pc-windows-msvc to Tier 2.
  • Promote loongarch64-unknown-linux-musl to Tier 2 with host tools.
  • Enable full tools and profiler for LoongArch Linux targets.
  • Unconditionally warn on usage of wasm32-wasi. (see compatibility note below)
  • Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.

Libraries

  • Split core's PanicInfo and std's PanicInfo. (see compatibility note below)
  • Generalize {Rc,Arc}::make_mut() to unsized types.
  • Replace sort implementations with stable driftsort and unstable ipnsort. All slice::sort* and slice::select_nth* methods are expected to see significant performance improvements. See the research project https://github.com/Voultapher/sort-research-rs for more details.
  • Document behavior of create_dir_all with respect to empty paths.
  • Fix interleaved output in the default panic hook when multiple threads panic simultaneously.

Stabilized APIs

  • core::error https://doc.rust-lang.org/stable/core/error/index.html
  • hint::assert_unchecked https://doc.rust-lang.org/stable/core/hint/fn.assert_unchecked.html
  • fs::exists https://doc.rust-lang.org/stable/std/fs/fn.exists.html
  • AtomicBool::fetch_not https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicBool.html#method.fetch_not
  • Duration::abs_diff https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.abs_diff
  • IoSlice::advance https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance
  • IoSlice::advance_slices https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance_slices
  • IoSliceMut::advance https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance
  • IoSliceMut::advance_slices https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance_slices
  • PanicHookInfo https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html
  • PanicInfo::message https://doc.rust-lang.org/stable/core/panic/struct.PanicInfo.html#method.message
  • PanicMessage https://doc.rust-lang.org/stable/core/panic/struct.PanicMessage.html

These APIs are now stable in const contexts:

  • char::from_u32_unchecked https://doc.rust-lang.org/stable/core/char/fn.from_u32_unchecked.html (function)
  • char::from_u32_unchecked https://doc.rust-lang.org/stable/core/primitive.char.html#method.from_u32_unchecked (method)
  • CStr::count_bytes https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.count_bytes
  • CStr::from_ptr https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.from_ptr

Cargo

  • Generated .cargo_vcs_info.json is always included, even when --allow-dirty is passed.
  • Disallow package.license-file and package.readme pointing to non-existent files during packaging.
  • Disallow passing --release/--debug flag along with the --profile flag.
  • Remove lib.plugin key support in Cargo.toml. Rust plugin support has been deprecated for four years and was removed in 1.75.0.

Compatibility Notes

  • Usage of the wasm32-wasi target will now issue a compiler warning and request users switch to the wasm32-wasip1 target instead. Both targets are the same, wasm32-wasi is only being renamed, and this change to the WASI target https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html is being done to enable removing wasm32-wasi in January 2025.
  • We have renamed std::panic::PanicInfo to std::panic::PanicHookInfo. The old name will continue to work as an alias, but will result in a deprecation warning starting in Rust 1.82.0. core::panic::PanicInfo will remain unchanged, however, as this is now a different type.

The reason is that these types have different roles: std::panic::PanicHookInfo is the argument to the panic hook https://doc.rust-lang.org/stable/std/panic/fn.set_hook.html in std context (where panics can have an arbitrary payload), while core::panic::PanicInfo is the argument to the #[panic_handler] https://doc.rust-lang.org/nomicon/panic-handler.html in no_std context (where panics always carry a formatted message). Separating these types allows us to add more useful methods to these types, such as std::panic::PanicHookInfo::payload_as_str() and core::panic::PanicInfo::message(). * The new sort implementations may panic if a type's implementation of Ord https://doc.rust-lang.org/std/cmp/trait.Ord.html (or the given comparison function) does not implement a total order https://en.wikipedia.org/wiki/Total_order as the trait requires. Ord's supertraits (PartialOrd, Eq, and PartialEq) must also be consistent. The previous implementations would not "notice" any problem, but the new implementations have a good chance of detecting inconsistencies, throwing a panic rather than returning knowingly unsorted data. * In very rare cases, a change in the internal evaluation order of the trait solver may result in new fatal overflow errors.

Patch Instructions:

To install this SUSE update use the SUSE recommended installation methods like YaST online_update or "zypper patch".
Alternatively you can run the command listed for your product:

  • openSUSE Leap 15.5
    zypper in -t patch SUSE-2024-3406=1 openSUSE-SLE-15.5-2024-3406=1
  • openSUSE Leap 15.6
    zypper in -t patch openSUSE-SLE-15.6-2024-3406=1
  • Development Tools Module 15-SP5
    zypper in -t patch SUSE-SLE-Module-Development-Tools-15-SP5-2024-3406=1
  • Development Tools Module 15-SP6
    zypper in -t patch SUSE-SLE-Module-Development-Tools-15-SP6-2024-3406=1

Package List:

  • openSUSE Leap 15.5 (aarch64 ppc64le s390x x86_64 i586)
    • cargo1.81-1.81.0-150500.11.3.1
    • rust-1.81.0-150500.27.21.1
    • cargo-1.81.0-150500.27.21.1
    • rust1.81-debuginfo-1.81.0-150500.11.3.1
    • cargo1.81-debuginfo-1.81.0-150500.11.3.1
  • openSUSE Leap 15.5 (aarch64 ppc64le s390x x86_64 i586 nosrc)
    • rust1.81-1.81.0-150500.11.3.1
  • openSUSE Leap 15.5 (noarch)
    • rust1.81-src-1.81.0-150500.11.3.1
  • openSUSE Leap 15.5 (nosrc)
    • rust1.81-test-1.81.0-150500.11.3.2
  • openSUSE Leap 15.6 (aarch64 ppc64le s390x x86_64)
    • cargo1.81-1.81.0-150500.11.3.1
    • rust-1.81.0-150500.27.21.1
    • cargo-1.81.0-150500.27.21.1
    • rust1.81-debuginfo-1.81.0-150500.11.3.1
    • cargo1.81-debuginfo-1.81.0-150500.11.3.1
  • openSUSE Leap 15.6 (aarch64 ppc64le s390x x86_64 nosrc)
    • rust1.81-1.81.0-150500.11.3.1
  • openSUSE Leap 15.6 (noarch)
    • rust1.81-src-1.81.0-150500.11.3.1
  • Development Tools Module 15-SP5 (aarch64 ppc64le s390x x86_64)
    • cargo1.81-1.81.0-150500.11.3.1
    • rust-1.81.0-150500.27.21.1
    • cargo-1.81.0-150500.27.21.1
    • rust1.81-debuginfo-1.81.0-150500.11.3.1
    • cargo1.81-debuginfo-1.81.0-150500.11.3.1
  • Development Tools Module 15-SP5 (aarch64 ppc64le s390x x86_64 nosrc)
    • rust1.81-1.81.0-150500.11.3.1
  • Development Tools Module 15-SP5 (noarch)
    • rust1.81-src-1.81.0-150500.11.3.1
  • Development Tools Module 15-SP6 (aarch64 ppc64le s390x x86_64)
    • cargo1.81-1.81.0-150500.11.3.1
    • rust-1.81.0-150500.27.21.1
    • cargo-1.81.0-150500.27.21.1
    • rust1.81-debuginfo-1.81.0-150500.11.3.1
    • cargo1.81-debuginfo-1.81.0-150500.11.3.1
  • Development Tools Module 15-SP6 (aarch64 ppc64le s390x x86_64 nosrc)
    • rust1.81-1.81.0-150500.11.3.1
  • Development Tools Module 15-SP6 (noarch)
    • rust1.81-src-1.81.0-150500.11.3.1

References: