<div class="container">
<h1>Recommended update for rust, rust1.81</h1>
<table class="table table-striped table-bordered">
<tbody>
<tr>
<th>Announcement ID:</th>
<td>SUSE-RU-2024:3406-1</td>
</tr>
<tr>
<th>Rating:</th>
<td>moderate</td>
</tr>
<tr>
<th>References:</th>
<td>
<ul>
<li style="display: inline;">
<a href="https://jira.suse.com/browse/SLE-18626">jsc#SLE-18626</a>
</li>
</ul>
</td>
</tr>
<tr>
<th>Affected Products:</th>
<td>
<ul class="list-group">
<li class="list-group-item">Development Tools Module 15-SP5</li>
<li class="list-group-item">Development Tools Module 15-SP6</li>
<li class="list-group-item">openSUSE Leap 15.5</li>
<li class="list-group-item">openSUSE Leap 15.6</li>
<li class="list-group-item">SUSE Linux Enterprise Desktop 15 SP5</li>
<li class="list-group-item">SUSE Linux Enterprise Desktop 15 SP6</li>
<li class="list-group-item">SUSE Linux Enterprise High Performance Computing 15 SP5</li>
<li class="list-group-item">SUSE Linux Enterprise Real Time 15 SP5</li>
<li class="list-group-item">SUSE Linux Enterprise Real Time 15 SP6</li>
<li class="list-group-item">SUSE Linux Enterprise Server 15 SP5</li>
<li class="list-group-item">SUSE Linux Enterprise Server 15 SP6</li>
<li class="list-group-item">SUSE Linux Enterprise Server for SAP Applications 15 SP5</li>
<li class="list-group-item">SUSE Linux Enterprise Server for SAP Applications 15 SP6</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>An update that contains one feature can now be installed.</p>
<h2>Description:</h2>
<p>This update for rust, rust1.81 fixes the following issues:</p>
<p>Changes in rust1.81:</p>
<ul>
<li>Resolve wasm32-wasi build issues</li>
</ul>
<h1>Version 1.81.0 (2024-09-05)</h1>
<h2>Language</h2>
<ul>
<li>Abort on uncaught panics in <code>extern "C"</code> functions.</li>
<li>Fix ambiguous cases of multiple <code>&</code> in elided self lifetimes.</li>
<li>Stabilize <code>#[expect]</code> for lints (RFC 2383), like <code>#[allow]</code> with a warning if the lint is <em>not</em> fulfilled.</li>
<li>Change method resolution to constrain hidden types instead of rejecting method candidates.</li>
<li>Bump <code>elided_lifetimes_in_associated_constant</code> to deny.</li>
<li><code>offset_from</code>: always allow pointers to point to the same address.</li>
<li>Allow constraining opaque types during subtyping in the trait system.</li>
<li>Allow constraining opaque types during various unsizing casts.</li>
<li>Deny keyword lifetimes pre-expansion.</li>
</ul>
<h2>Compiler</h2>
<ul>
<li>Make casts of pointers to trait objects stricter.</li>
<li>Check alias args for well-formedness even if they have escaping bound vars.</li>
<li>Deprecate no-op codegen option <code>-Cinline-threshold=...</code>.</li>
<li>Re-implement a type-size based limit.</li>
<li>Properly account for alignment in <code>transmute</code> size checks.</li>
<li>Remove the <code>box_pointers</code> lint.</li>
<li>Ensure the interpreter checks bool/char for validity when they are used in a cast.</li>
<li>Improve coverage instrumentation for functions containing nested items.</li>
<li>Target changes:</li>
<li>Add Tier 3 <code>no_std</code> Xtensa targets: <code>xtensa-esp32-none-elf</code>, <code>xtensa-esp32s2-none-elf</code>, <code>xtensa-esp32s3-none-elf</code></li>
<li>Add Tier 3 <code>std</code> Xtensa targets: <code>xtensa-esp32-espidf</code>, <code>xtensa-esp32s2-espidf</code>, <code>xtensa-esp32s3-espidf</code></li>
<li>Add Tier 3 i686 Redox OS target: <code>i686-unknown-redox</code></li>
<li>Promote <code>arm64ec-pc-windows-msvc</code> to Tier 2.</li>
<li>Promote <code>loongarch64-unknown-linux-musl</code> to Tier 2 with host tools.</li>
<li>Enable full tools and profiler for LoongArch Linux targets.</li>
<li>Unconditionally warn on usage of <code>wasm32-wasi</code>. (see compatibility note below)</li>
<li>Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>Split core's <code>PanicInfo</code> and std's <code>PanicInfo</code>. (see compatibility note below)</li>
<li>Generalize <code>{Rc,Arc}::make_mut()</code> to unsized types.</li>
<li>Replace sort implementations with stable <code>driftsort</code> and unstable <code>ipnsort</code>. All <code>slice::sort*</code> and <code>slice::select_nth*</code> methods are expected to see significant performance improvements. See the research project https://github.com/Voultapher/sort-research-rs for more details.</li>
<li>Document behavior of <code>create_dir_all</code> with respect to empty paths.</li>
<li>Fix interleaved output in the default panic hook when multiple threads panic simultaneously.</li>
</ul>
<h2>Stabilized APIs</h2>
<ul>
<li><code>core::error</code> https://doc.rust-lang.org/stable/core/error/index.html</li>
<li><code>hint::assert_unchecked</code> https://doc.rust-lang.org/stable/core/hint/fn.assert_unchecked.html</li>
<li><code>fs::exists</code> https://doc.rust-lang.org/stable/std/fs/fn.exists.html</li>
<li><code>AtomicBool::fetch_not</code> https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicBool.html#method.fetch_not</li>
<li><code>Duration::abs_diff</code> https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.abs_diff</li>
<li><code>IoSlice::advance</code> https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance</li>
<li><code>IoSlice::advance_slices</code> https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance_slices</li>
<li><code>IoSliceMut::advance</code> https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance</li>
<li><code>IoSliceMut::advance_slices</code> https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance_slices</li>
<li><code>PanicHookInfo</code> https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html</li>
<li><code>PanicInfo::message</code> https://doc.rust-lang.org/stable/core/panic/struct.PanicInfo.html#method.message</li>
<li><code>PanicMessage</code> https://doc.rust-lang.org/stable/core/panic/struct.PanicMessage.html</li>
</ul>
<p>These APIs are now stable in const contexts:</p>
<ul>
<li><code>char::from_u32_unchecked</code> https://doc.rust-lang.org/stable/core/char/fn.from_u32_unchecked.html (function)</li>
<li><code>char::from_u32_unchecked</code> https://doc.rust-lang.org/stable/core/primitive.char.html#method.from_u32_unchecked (method)</li>
<li><code>CStr::count_bytes</code> https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.count_bytes</li>
<li><code>CStr::from_ptr</code> https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.from_ptr</li>
</ul>
<h2>Cargo</h2>
<ul>
<li>Generated <code>.cargo_vcs_info.json</code> is always included, even when <code>--allow-dirty</code> is passed.</li>
<li>Disallow <code>package.license-file</code> and <code>package.readme</code> pointing to non-existent files during packaging.</li>
<li>Disallow passing <code>--release</code>/<code>--debug</code> flag along with the <code>--profile</code> flag.</li>
<li>Remove <code>lib.plugin</code> key support in <code>Cargo.toml</code>. Rust plugin support has been deprecated for four years and was removed in 1.75.0.</li>
</ul>
<h2>Compatibility Notes</h2>
<ul>
<li>Usage of the <code>wasm32-wasi</code> target will now issue a compiler warning and request users switch to the <code>wasm32-wasip1</code> target instead. Both targets are the same, <code>wasm32-wasi</code> 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 <code>wasm32-wasi</code> in January 2025.</li>
<li>We have renamed <code>std::panic::PanicInfo</code> to <code>std::panic::PanicHookInfo</code>. The old name will continue to work as an alias, but will result in a deprecation warning starting in Rust 1.82.0.
<code>core::panic::PanicInfo</code> will remain unchanged, however, as this is now a <em>different type</em>.</li>
</ul>
<p>The reason is that these types have different roles: <code>std::panic::PanicHookInfo</code> 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 <code>core::panic::PanicInfo</code> is the argument to the <code>#[panic_handler]</code> https://doc.rust-lang.org/nomicon/panic-handler.html in no_std context (where panics always carry a formatted <em>message</em>). Separating these types allows us to add more useful methods to these types, such as <code>std::panic::PanicHookInfo::payload_as_str()</code> and <code>core::panic::PanicInfo::message()</code>.
* The new sort implementations may panic if a type's implementation of <code>Ord</code> 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. <code>Ord</code>'s supertraits (<code>PartialOrd</code>, <code>Eq</code>, and <code>PartialEq</code>) 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.</p>
<h2>Patch Instructions:</h2>
<p>
To install this SUSE update use the SUSE recommended
installation methods like YaST online_update or "zypper patch".<br/>
Alternatively you can run the command listed for your product:
</p>
<ul class="list-group">
<li class="list-group-item">
openSUSE Leap 15.5
<br/>
<code>zypper in -t patch SUSE-2024-3406=1 openSUSE-SLE-15.5-2024-3406=1</code>
</li>
<li class="list-group-item">
openSUSE Leap 15.6
<br/>
<code>zypper in -t patch openSUSE-SLE-15.6-2024-3406=1</code>
</li>
<li class="list-group-item">
Development Tools Module 15-SP5
<br/>
<code>zypper in -t patch SUSE-SLE-Module-Development-Tools-15-SP5-2024-3406=1</code>
</li>
<li class="list-group-item">
Development Tools Module 15-SP6
<br/>
<code>zypper in -t patch SUSE-SLE-Module-Development-Tools-15-SP6-2024-3406=1</code>
</li>
</ul>
<h2>Package List:</h2>
<ul>
<li>
openSUSE Leap 15.5 (aarch64 ppc64le s390x x86_64 i586)
<ul>
<li>cargo1.81-1.81.0-150500.11.3.1</li>
<li>rust-1.81.0-150500.27.21.1</li>
<li>cargo-1.81.0-150500.27.21.1</li>
<li>rust1.81-debuginfo-1.81.0-150500.11.3.1</li>
<li>cargo1.81-debuginfo-1.81.0-150500.11.3.1</li>
</ul>
</li>
<li>
openSUSE Leap 15.5 (aarch64 ppc64le s390x x86_64 i586 nosrc)
<ul>
<li>rust1.81-1.81.0-150500.11.3.1</li>
</ul>
</li>
<li>
openSUSE Leap 15.5 (noarch)
<ul>
<li>rust1.81-src-1.81.0-150500.11.3.1</li>
</ul>
</li>
<li>
openSUSE Leap 15.5 (nosrc)
<ul>
<li>rust1.81-test-1.81.0-150500.11.3.2</li>
</ul>
</li>
<li>
openSUSE Leap 15.6 (aarch64 ppc64le s390x x86_64)
<ul>
<li>cargo1.81-1.81.0-150500.11.3.1</li>
<li>rust-1.81.0-150500.27.21.1</li>
<li>cargo-1.81.0-150500.27.21.1</li>
<li>rust1.81-debuginfo-1.81.0-150500.11.3.1</li>
<li>cargo1.81-debuginfo-1.81.0-150500.11.3.1</li>
</ul>
</li>
<li>
openSUSE Leap 15.6 (aarch64 ppc64le s390x x86_64 nosrc)
<ul>
<li>rust1.81-1.81.0-150500.11.3.1</li>
</ul>
</li>
<li>
openSUSE Leap 15.6 (noarch)
<ul>
<li>rust1.81-src-1.81.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP5 (aarch64 ppc64le s390x x86_64)
<ul>
<li>cargo1.81-1.81.0-150500.11.3.1</li>
<li>rust-1.81.0-150500.27.21.1</li>
<li>cargo-1.81.0-150500.27.21.1</li>
<li>rust1.81-debuginfo-1.81.0-150500.11.3.1</li>
<li>cargo1.81-debuginfo-1.81.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP5 (aarch64 ppc64le s390x x86_64 nosrc)
<ul>
<li>rust1.81-1.81.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP5 (noarch)
<ul>
<li>rust1.81-src-1.81.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP6 (aarch64 ppc64le s390x x86_64)
<ul>
<li>cargo1.81-1.81.0-150500.11.3.1</li>
<li>rust-1.81.0-150500.27.21.1</li>
<li>cargo-1.81.0-150500.27.21.1</li>
<li>rust1.81-debuginfo-1.81.0-150500.11.3.1</li>
<li>cargo1.81-debuginfo-1.81.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP6 (aarch64 ppc64le s390x x86_64 nosrc)
<ul>
<li>rust1.81-1.81.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP6 (noarch)
<ul>
<li>rust1.81-src-1.81.0-150500.11.3.1</li>
</ul>
</li>
</ul>
<h2>References:</h2>
<ul>
<li>
<a href="https://jira.suse.com/browse/SLE-18626">https://jira.suse.com/browse/SLE-18626</a>
</li>
</ul>
</div>