<div class="container">
<h1>Recommended update for rust, rust1.80</h1>
<table class="table table-striped table-bordered">
<tbody>
<tr>
<th>Announcement ID:</th>
<td>SUSE-RU-2024:2777-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.80 fixes the following issues:</p>
<h1>Version 1.80.0 (2024-07-25)</h1>
<h2>Language</h2>
<ul>
<li>Document maximum allocation size</li>
<li>Allow zero-byte offsets and ZST read/writes on arbitrary pointers</li>
<li>Support C23's variadics without a named parameter</li>
<li>Stabilize <code>exclusive_range_pattern</code> feature</li>
<li>Guarantee layout and ABI of <code>Result</code> in some scenarios</li>
</ul>
<h2>Compiler</h2>
<ul>
<li>Update cc crate to v1.0.97 allowing additional spectre mitigations on MSVC targets</li>
<li>Allow field reordering on types marked <code>repr(packed(1))</code></li>
<li>Add a lint against never type fallback affecting unsafe code</li>
<li>Disallow cast with trailing braced macro in let-else</li>
<li>Expand <code>for_loops_over_fallibles</code> lint to lint on fallibles behind references.</li>
<li>self-contained linker: retry linking without <code>-fuse-ld=lld</code> on CCs that don't support it</li>
<li>Do not parse CVarArgs (<code>...</code>) as a type in trait bounds</li>
<li>Improvements to LLDB formatting </li>
<li>For the wasm32-wasip2 target default to PIC and do not use <code>-fuse-ld=lld</code></li>
<li>Add x86_64-unknown-linux-none as a tier 3 target</li>
<li>Lint on <code>foo.into_iter()</code> resolving to <code>&Box<[T]>: IntoIterator</code></li>
</ul>
<h2>Libraries</h2>
<ul>
<li>Add <code>size_of</code> and <code>size_of_val</code> and <code>align_of</code> and <code>align_of_val</code> to the prelude</li>
<li>Abort a process when FD ownership is violated</li>
<li>io::Write::write_fmt: panic if the formatter fails when the stream does not fail</li>
<li>Panic if <code>PathBuf::set_extension</code> would add a path separator</li>
<li>Add assert_unsafe_precondition to unchecked_{add,sub,neg,mul,shl,shr} methods</li>
<li>Update <code>c_char</code> on AIX to use the correct type</li>
<li><code>offset_of!</code> no longer returns a temporary</li>
<li>Handle sigma in <code>str.to_lowercase</code> correctly</li>
<li>Raise <code>DEFAULT_MIN_STACK_SIZE</code> to at least 64KiB</li>
</ul>
<h2>Stabilized APIs</h2>
<ul>
<li><code>impl Default for Rc<CStr></code> https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3CCStr%3E</li>
<li><code>impl Default for Rc<str></code> https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3Cstr%3E</li>
<li><code>impl Default for Rc<[T]></code> https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3C%5BT%5D%3E</li>
<li><code>impl Default for Arc<str></code> https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3Cstr%3E</li>
<li><code>impl Default for Arc<CStr></code> https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3CCStr%3E</li>
<li><code>impl Default for Arc<[T]></code> https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3C%5BT%5D%3E</li>
<li><code>impl IntoIterator for Box<[T]></code> https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-IntoIterator-for-Box%3C%5BI%5D,+A%3E</li>
<li><code>impl FromIterator<String> for Box<str></code> https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-FromIterator%3CString%3E-for-Box%3Cstr%3E) </li>
<li><code>impl FromIterator<char> for Box<str></code> https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-FromIterator%3Cchar%3E-for-Box%3Cstr%3E</li>
<li><code>LazyCell</code> https://doc.rust-lang.org/beta/core/cell/struct.LazyCell.html</li>
<li><code>LazyLock</code> https://doc.rust-lang.org/beta/std/sync/struct.LazyLock.html</li>
<li><code>Duration::div_duration_f32</code> https://doc.rust-lang.org/beta/std/time/struct.Duration.html#method.div_duration_f32</li>
<li><code>Duration::div_duration_f64</code> https://doc.rust-lang.org/beta/std/time/struct.Duration.html#method.div_duration_f64</li>
<li><code>Option::take_if</code> https://doc.rust-lang.org/beta/std/option/enum.Option.html#method.take_if</li>
<li><code>Seek::seek_relative</code> https://doc.rust-lang.org/beta/std/io/trait.Seek.html#method.seek_relative</li>
<li><code>BinaryHeap::as_slice</code> https://doc.rust-lang.org/beta/std/collections/struct.BinaryHeap.html#method.as_slice</li>
<li><code>NonNull::offset</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.offset</li>
<li><code>NonNull::byte_offset</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_offset</li>
<li><code>NonNull::add</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.add</li>
<li><code>NonNull::byte_add</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_add</li>
<li><code>NonNull::sub</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.sub</li>
<li><code>NonNull::byte_sub</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_sub</li>
<li><code>NonNull::offset_from</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.offset_from</li>
<li><code>NonNull::byte_offset_from</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_offset_from</li>
<li><code>NonNull::read</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read</li>
<li><code>NonNull::read_volatile</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read_volatile</li>
<li><code>NonNull::read_unaligned</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read_unaligned</li>
<li><code>NonNull::write</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write</li>
<li><code>NonNull::write_volatile</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_volatile</li>
<li><code>NonNull::write_unaligned</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_unaligned</li>
<li><code>NonNull::write_bytes</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_bytes</li>
<li><code>NonNull::copy_to</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_to</li>
<li><code>NonNull::copy_to_nonoverlapping</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_to_nonoverlapping</li>
<li><code>NonNull::copy_from</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_from</li>
<li><code>NonNull::copy_from_nonoverlapping</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_from_nonoverlapping</li>
<li><code>NonNull::replace</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.replace</li>
<li><code>NonNull::swap</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.swap</li>
<li><code>NonNull::drop_in_place</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.drop_in_place</li>
<li><code>NonNull::align_offset</code> https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.align_offset</li>
<li><code><[T]>::split_at_checked</code> https://doc.rust-lang.org/beta/std/primitive.slice.html#method.split_at_checked</li>
<li><code><[T]>::split_at_mut_checked</code> https://doc.rust-lang.org/beta/std/primitive.slice.html#method.split_at_mut_checked</li>
<li><code>str::split_at_checked</code> https://doc.rust-lang.org/beta/std/primitive.str.html#method.split_at_checked</li>
<li><code>str::split_at_mut_checked</code> https://doc.rust-lang.org/beta/std/primitive.str.html#method.split_at_mut_checked</li>
<li><code>str::trim_ascii</code> https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii</li>
<li><code>str::trim_ascii_start</code> https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii_start</li>
<li><code>str::trim_ascii_end</code> https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii_end</li>
<li><code><[u8]>::trim_ascii</code> https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii</li>
<li><code><[u8]>::trim_ascii_start</code> https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii_start</li>
<li><code><[u8]>::trim_ascii_end</code> https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii_end</li>
<li><code>Ipv4Addr::BITS</code> https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#associatedconstant.BITS</li>
<li><code>Ipv4Addr::to_bits</code> https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#method.to_bits</li>
<li><code>Ipv4Addr::from_bits</code> https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#method.from_bits</li>
<li><code>Ipv6Addr::BITS</code> https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#associatedconstant.BITS</li>
<li><code>Ipv6Addr::to_bits</code> https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#method.to_bits</li>
<li><code>Ipv6Addr::from_bits</code> https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#method.from_bits</li>
<li><code>Vec::<[T; N]>::into_flattened</code> https://doc.rust-lang.org/beta/alloc/vec/struct.Vec.html#method.into_flattened</li>
<li><code><[[T; N]]>::as_flattened</code> https://doc.rust-lang.org/beta/core/primitive.slice.html#method.as_flattened</li>
<li><code><[[T; N]]>::as_flattened_mut</code> https://doc.rust-lang.org/beta/core/primitive.slice.html#method.as_flattened_mut</li>
</ul>
<p>These APIs are now stable in const contexts:</p>
<ul>
<li><code><[T]>::last_chunk</code> https://doc.rust-lang.org/beta/core/primitive.slice.html#method.last_chunk</li>
<li><code>BinaryHeap::new</code> https://doc.rust-lang.org/beta/std/collections/struct.BinaryHeap.html#method.new</li>
</ul>
<h2>Cargo</h2>
<ul>
<li>Stabilize <code>-Zcheck-cfg</code> as always enabled</li>
<li>Warn, rather than fail publish, if a target is excluded</li>
<li>Add special <code>check-cfg</code> lint config for the <code>unexpected_cfgs</code> lint</li>
<li>Stabilize <code>cargo update --precise <yanked></code></li>
<li>Don't change file permissions on <code>Cargo.toml</code> when using <code>cargo add</code></li>
<li>Support using <code>cargo fix</code> on IPv6-only networks</li>
</ul>
<h2>Rustdoc</h2>
<ul>
<li>Allow searching for references</li>
<li>Stabilize <code>custom_code_classes_in_docs</code> feature</li>
<li>fix: In cross-crate scenarios show enum variants on type aliases of enums</li>
</ul>
<h2>Compatibility Notes</h2>
<ul>
<li>rustfmt estimates line lengths differently when using non-ascii characters</li>
<li>Type aliases are now handled correctly in orphan check</li>
<li>Allow instructing rustdoc to read from stdin via <code>-</code></li>
<li><code>std::env::{set_var, remove_var}</code> can no longer be converted to safe function pointers and no longer implement the <code>Fn</code> family of traits</li>
<li>Warn (or error) when <code>Self</code> constructor from outer item is referenced in inner nested item</li>
<li>Turn <code>indirect_structural_match</code> and <code>pointer_structural_match</code> lints into hard errors</li>
<li>Make <code>where_clause_object_safety</code> lint a regular object safety violation</li>
<li>Turn <code>proc_macro_back_compat</code> lint into a hard error.</li>
<li>Detect unused structs even when implementing private traits</li>
<li><code>std::sync::ReentrantLockGuard<T></code> is no longer <code>Sync</code> if <code>T: !Sync</code></li>
</ul>
<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-2777=1 openSUSE-SLE-15.5-2024-2777=1</code>
</li>
<li class="list-group-item">
openSUSE Leap 15.6
<br/>
<code>zypper in -t patch openSUSE-SLE-15.6-2024-2777=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-2777=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-2777=1</code>
</li>
</ul>
<h2>Package List:</h2>
<ul>
<li>
openSUSE Leap 15.5 (aarch64 ppc64le s390x x86_64 i586)
<ul>
<li>cargo-1.80.0-150500.27.18.1</li>
<li>rust-1.80.0-150500.27.18.1</li>
<li>cargo1.80-debuginfo-1.80.0-150500.11.3.1</li>
<li>rust1.80-debuginfo-1.80.0-150500.11.3.1</li>
<li>cargo1.80-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
openSUSE Leap 15.5 (aarch64 ppc64le s390x x86_64 i586 nosrc)
<ul>
<li>rust1.80-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
openSUSE Leap 15.5 (noarch)
<ul>
<li>rust1.80-src-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
openSUSE Leap 15.5 (nosrc)
<ul>
<li>rust1.80-test-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
openSUSE Leap 15.6 (aarch64 ppc64le s390x x86_64)
<ul>
<li>cargo-1.80.0-150500.27.18.1</li>
<li>rust-1.80.0-150500.27.18.1</li>
<li>cargo1.80-debuginfo-1.80.0-150500.11.3.1</li>
<li>rust1.80-debuginfo-1.80.0-150500.11.3.1</li>
<li>cargo1.80-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
openSUSE Leap 15.6 (aarch64 ppc64le s390x x86_64 nosrc)
<ul>
<li>rust1.80-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
openSUSE Leap 15.6 (noarch)
<ul>
<li>rust1.80-src-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP5 (aarch64 ppc64le s390x x86_64)
<ul>
<li>cargo-1.80.0-150500.27.18.1</li>
<li>rust-1.80.0-150500.27.18.1</li>
<li>cargo1.80-debuginfo-1.80.0-150500.11.3.1</li>
<li>rust1.80-debuginfo-1.80.0-150500.11.3.1</li>
<li>cargo1.80-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP5 (aarch64 ppc64le s390x x86_64 nosrc)
<ul>
<li>rust1.80-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP5 (noarch)
<ul>
<li>rust1.80-src-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP6 (aarch64 ppc64le s390x x86_64)
<ul>
<li>cargo-1.80.0-150500.27.18.1</li>
<li>rust-1.80.0-150500.27.18.1</li>
<li>cargo1.80-debuginfo-1.80.0-150500.11.3.1</li>
<li>rust1.80-debuginfo-1.80.0-150500.11.3.1</li>
<li>cargo1.80-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP6 (aarch64 ppc64le s390x x86_64 nosrc)
<ul>
<li>rust1.80-1.80.0-150500.11.3.1</li>
</ul>
</li>
<li>
Development Tools Module 15-SP6 (noarch)
<ul>
<li>rust1.80-src-1.80.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>