Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unpin cc and upgrade to the latest version #131070

Merged
merged 1 commit into from
Oct 2, 2024

Conversation

tgross35
Copy link
Contributor

@tgross35 tgross35 commented Sep 30, 2024

cc was previously pinned because 1.1.106 dropped support for Visual Studio 12 (2013), and we wanted to decouple that from the rest of the automated updates. As noted in 2, there is no longer anything indicating we support VS2013, so it should be okay to unpin it.

cc 1.1.22 contains a fix that may help improve the high MSVC CI failure rate 3, so we also have motivation to update to that point.

try-job: x86_64-msvc-ext

r? @ChrisDenton
cc @dpaoliello
cc @Mark-Simulacrum (from #128722 (comment))

`cc` was previously pinned because version 1.1.106 dropped support for
Visual Studio 12 (2013), and we wanted to decouple that from the rest of
the automated updates. As noted in [2], there is no longer anything
indicating we support VS2013, so it should be okay to unpin it.

`cc` 1.1.22 contains a fix that may help improve the high MSVC CI
failure rate [3], so we also have motivation to update to that point.

[1]: rust-lang#129307
[2]: rust-lang#129307 (comment)
[3]: rust-lang#127883
@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Sep 30, 2024
@rustbot
Copy link
Collaborator

rustbot commented Sep 30, 2024

These commits modify the Cargo.lock file. Unintentional changes to Cargo.lock can be introduced when switching branches and rebasing PRs.

If this was unintentional then you should revert the changes before this PR is merged.
Otherwise, you can ignore this comment.

@tgross35
Copy link
Contributor Author

tgross35 commented Sep 30, 2024

@bors try
@bors rollup=iffy

@bors
Copy link
Contributor

bors commented Sep 30, 2024

⌛ Trying commit eaaa943 with merge 4fc810a...

bors added a commit to rust-lang-ci/rust that referenced this pull request Sep 30, 2024
Unpin `cc` and upgrade to the latest version

`cc` was previously pinned because 1.1.106 dropped support for Visual Studio 12 (2013), and we wanted to decouple that from the rest of the automated updates. As noted in [2], there is no longer anything indicating we support VS2013, so it should be okay to unpin it.

`cc` 1.1.22 contains a fix that may help improve the high MSVC CI failure rate [3], so we also have motivation to update to that point.

[1]: rust-lang#129307
[2]: rust-lang#129307 (comment)
[3]: rust-lang#127883

try-job: x86_64-msvc-ext
@tgross35
Copy link
Contributor Author

Probably @bors rollup=never actually...

@ChrisDenton
Copy link
Member

👍 from me but this really should have a T-compiler reviewer

@tgross35
Copy link
Contributor Author

Yeah you're right, thanks for confirming

r? compiler

@rustbot rustbot assigned wesleywiser and unassigned ChrisDenton Sep 30, 2024
@bors
Copy link
Contributor

bors commented Sep 30, 2024

☀️ Try build successful - checks-actions
Build commit: 4fc810a (4fc810ab099f1e4ec723e4cdd5f322502f8ba5e0)

Copy link
Member

@wesleywiser wesleywiser left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tagging as relnote but as VS 2013 has been out of support for months-to-years (depending on whether you count extended support or not), I don't think this will be a big deal for users.

@wesleywiser wesleywiser added the relnotes Marks issues that should be documented in the release notes of the next release. label Oct 1, 2024
@wesleywiser
Copy link
Member

@bors r+

@bors
Copy link
Contributor

bors commented Oct 1, 2024

📌 Commit eaaa943 has been approved by wesleywiser

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 1, 2024
@bors
Copy link
Contributor

bors commented Oct 2, 2024

⌛ Testing commit eaaa943 with merge 1d71891...

@bors
Copy link
Contributor

bors commented Oct 2, 2024

☀️ Test successful - checks-actions
Approved by: wesleywiser
Pushing 1d71891 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Oct 2, 2024
@bors bors merged commit 1d71891 into rust-lang:master Oct 2, 2024
7 checks passed
@rustbot rustbot added this to the 1.83.0 milestone Oct 2, 2024
@tgross35 tgross35 deleted the update-root-cc branch October 2, 2024 03:29
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (1d71891): comparison URL.

Overall result: ✅ improvements - no action needed

@rustbot label: -perf-regression

Instruction count

This is a highly reliable metric that was used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.2% [-0.2%, -0.2%] 1
All ❌✅ (primary) - - 0

Max RSS (memory usage)

Results (primary 1.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
1.0% [1.0%, 1.0%] 1
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 1.0% [1.0%, 1.0%] 1

Cycles

Results (primary -2.6%, secondary -2.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-2.6% [-2.6%, -2.6%] 1
Improvements ✅
(secondary)
-2.1% [-2.5%, -1.8%] 5
All ❌✅ (primary) -2.6% [-2.6%, -2.6%] 1

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 770.288s -> 770.698s (0.05%)
Artifact size: 341.52 MiB -> 341.48 MiB (-0.01%)

@jieyouxu jieyouxu added the CI-spurious-fail-msvc CI spurious failure: target env msvc label Oct 15, 2024
@alexcrichton
Copy link
Member

I've recently tried to update the nightly we use in Wasmtime's CI and it's failing. After that I minimized the CI failure and ran a "bisection on github" which yielded this regression range. Within that range is this PR updating the cc crate, and the specific error we're running into looks like:

CUSTOMBUILD : error : linking with `link.exe` failed: exit code: 1120 [D:\a\wasmtime\wasmtime\target\c-api-build\wasmtime-crate.vcxproj]
    |
    = note: "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\bin\\HostX64\\x64\\link.exe" "/DEF:C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\rustcQmo3vX\\lib.def" "/NOLOGO" "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\rustcQmo3vX\\symbols.o" "D:\\a\\wasmtime\\wasmtime\\target\\aarch64-pc-windows-msvc\\release\\deps\\wasmtime.wasmtime.5d0bb5c93767783-cgu.0.rcgu.o" "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\rustcQmo3vX\\libwasmtime-23b1ceb4a4c3125e.rlib" "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\rustcQmo3vX\\libstd-cc044fac50b9bc2f.rlib" "D:\\a\\wasmtime\\wasmtime\\target\\aarch64-pc-windows-msvc\\release\\deps\\libcompiler_builtins-bac3a61622f83a04.rlib" "legacy_stdio_definitions.lib" "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\windows_aarch64_msvc-0.52.6\\lib\\windows.0.52.0.lib" "kernel32.lib" "kernel32.lib" "advapi32.lib" "ntdll.lib" "userenv.lib" "ws2_32.lib" "dbghelp.lib" "/defaultlib:libcmt" "/NXCOMPAT" "/LIBPATH:C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.41.34120\\atlmfc\\lib\\arm64" "/LIBPATH:D:\\a\\wasmtime\\wasmtime\\target\\aarch64-pc-windows-msvc\\release\\build\\wasmtime-e3ab72304732b115\\out" "/LIBPATH:C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\windows_aarch64_msvc-0.52.6\\lib" "/OUT:D:\\a\\wasmtime\\wasmtime\\target\\aarch64-pc-windows-msvc\\release\\deps\\wasmtime.dll" "/OPT:REF,ICF" "/DLL" "/IMPLIB:D:\\a\\wasmtime\\wasmtime\\target\\aarch64-pc-windows-msvc\\release\\deps\\wasmtime.dll.lib" "/DEBUG" "/PDBALTPATH:%_PDB%" "/NATVIS:C:\\Users\\runneradmin\\.rustup\\toolchains\\nightly-2024-10-03-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\intrinsic.natvis" "/NATVIS:C:\\Users\\runneradmin\\.rustup\\toolchains\\nightly-2024-10-03-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\liballoc.natvis" "/NATVIS:C:\\Users\\runneradmin\\.rustup\\toolchains\\nightly-2024-10-03-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libcore.natvis" "/NATVIS:C:\\Users\\runneradmin\\.rustup\\toolchains\\nightly-2024-10-03-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libstd.natvis"
    = note:    Creating library D:\a\wasmtime\wasmtime\target\aarch64-pc-windows-msvc\release\deps\wasmtime.dll.lib and object D:\a\wasmtime\wasmtime\target\aarch64-pc-windows-msvc\release\deps\wasmtime.dll.expΓÉì
wasmtime.wasmtime.5d0bb5c93767783-cgu.0.rcgu.o : error LNK2019: unresolved external symbol memcpy referenced in function _ZN132_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$alloc..vec..spec_extend..SpecExtend$LT$$RF$T$C$core..slice..iter..Iter$LT$T$GT$$GT$$GT$11spec_extend17hd634bb8c4092ac00EΓÉì [D:\a\wasmtime\wasmtime\target\c-api-build\wasmtime-crate.vcxproj]
...
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.41.34120\lib\x64\legacy_stdio_definitions.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'ARM64'ΓÉì [D:\a\wasmtime\wasmtime\target\c-api-build\wasmtime-crate.vcxproj]
C:\Program Files (x86)\Windows Kits\10\lib\10.0.20348.0\um\x64\kernel32.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'ARM64'ΓÉì [D:\a\wasmtime\wasmtime\target\c-api-build\wasmtime-crate.vcxproj]
C:\Program Files (x86)\Windows Kits\10\lib\10.0.20348.0\um\x64\advapi32.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'ARM64'ΓÉì [D:\a\wasmtime\wasmtime\target\c-api-build\wasmtime-crate.vcxproj]
C:\Program Files (x86)\Windows Kits\10\lib\10.0.20348.0\um\x64\ntdll.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'ARM64'ΓÉì [D:\a\wasmtime\wasmtime\target\c-api-build\wasmtime-crate.vcxproj]
C:\Program Files (x86)\Windows Kits\10\lib\10.0.20348.0\um\x64\userenv.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'ARM64'ΓÉì [D:\a\wasmtime\wasmtime\target\c-api-build\wasmtime-crate.vcxproj]
C:\Program Files (x86)\Windows Kits\10\lib\10.0.20348.0\um\x64\ws2_32.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'ARM64'ΓÉì [D:\a\wasmtime\wasmtime\target\c-api-build\wasmtime-crate.vcxproj]
C:\Program Files (x86)\Windows Kits\10\lib\10.0.20348.0\um\x64\dbghelp.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'ARM64'ΓÉì [D:\a\wasmtime\wasmtime\target\c-api-build\wasmtime-crate.vcxproj]
D:\a\wasmtime\wasmtime\target\aarch64-pc-windows-msvc\release\deps\wasmtime.dll : fatal error LNK1120: 15 unresolved externalsΓÉì [D:\a\wasmtime\wasmtime\target\c-api-build\wasmtime-crate.vcxproj]
            
  
CUSTOMBUILD : error : could not compile `wasmtime-c-api` (lib) due to 1 previous error [D:\a\wasmtime\wasmtime\target\c-api-build\wasmtime-crate.vcxproj]

I unfortunately can't reproduce this locally and I think it's likely relatively specific to the setup of CI. I for example don't know what toolchain components are installed on github actions on Windows for the various bits and pieces here.

All that's to say that I think this PR's update is the likely cause of the build issue we're running into. I certainly won't go so far as to say that this is the component at fault, it's probably just uncovering something about how we're configuring CI wrong or something like that.

Specifically the shape of the issue is:

  • We're building a release binary for aarch64-pc-windows-msvc on CI
  • This is running on today's windows-latest which is x64 which means this is a cross-compile
  • We're using CMake to run the build, so it's github actions calls bash (a script) calls cmake calls rustc.
  • CMake is using what I believe is MSBuild as the build system

If I had to hazard a guess what I would suspect is happening is that MSBuild doesn't know it's doing a cross compile (I have no idea how one would configure it to do so if this is the case) and so it's setting some env vars which this cc crate update is then picking up and forwarding to rustc and somehow causing x64 libs to be used instead of arm64 libs.

Apologies for the long explanation here, but what I wanted to ask here is (a) if this is a known "change" that might happen with updating cc and (b) is there someone who might be best to ping about this and help figure out a good solution here? (e.g. an issue here, an issue on cc, just go fix this in Wasmtime, etc)

@tgross35
Copy link
Contributor Author

@alexcrichton are you familiar with the issue at #127883? We have been seeing issues with link.exe and others that only happen in CI (no local reproduction) for a few months now. There was a problem in a specific version of cc that made things worse (100% failure rate so we could never bump there), the version here includes a fix for that. But maybe there is something else going on with cc?

Probably worth bringing up in the Zulip thread, https://rust-lang.zulipchat.com/#narrow/channel/242791-t-infra/topic/Spurious.20CI.20errors.20on.20x86_64-msvc-ext

@alexcrichton
Copy link
Member

Oh I don't think this is related to that in that this isn't a spurious error it's a deterministic error from what I've seen so far. This PR being the "cause" is I presume due to some change between 1.0.105 and 1.1.23 for cc and how it interacts with msvc compiles and such

@tgross35
Copy link
Contributor Author

We actually did have something similar where it was failing 100% of the time bumping 1.0.99 to 1.1.22, in #130720, which was bisected to a caching change in 1.0.101. This PR just includes a fix for that. But there were a lot of other things updated for MSVC within bumped versions rust-lang/cc-rs@cc-v1.0.105...cc-v1.1.23.

Any chance you are able to adjust cc's version and see how that changes things? That is more or less what I did to narrow down this bad cc version in #130908.

@ChrisDenton might have other ideas. There is definitely something weird going on with cc+GHA+MSVC...

@ChrisDenton
Copy link
Member

@alexcrichton This looks like a real error to me and I suspect this is a case where we have to make someone unhappy. cc-rs tries to respect external build systems (such as cmake and msbuild) because people often don't like us clobbering them. This complicates things and is made harder when build scripts are involved, as obviously they are compiled for the host rather than the target.

From what I can tell, it looks like the environment is set up to target x64 but is compiling for aarch64. You could maybe try setting VSCMD_ARG_TGT_ARCH environment variable to "x64", This should (hopefully!) trigger the cc-rs logic that attempts to fix up a wrong target.

Otherwise you may want to open an issue on the cc-rs repo to figure out what's going on in your build and if we can make things work again without breaking other people or if we need to reevaluate some trade-offs that have been made.

@alexcrichton
Copy link
Member

Ah ok that makes sense, thanks for explaining! I think bisection of cc is difficult here since it's not a build script causing the issue but it's actually rustc itself so I'd have to create a number of custom compilers each with a different version of cc which is a bit of an investment to do.

I'll try to poke around and see if there's an "official" way to tell CMake that we're cross-compiling so it would hopefully forward different flags to the MSBuild generator. Either that or I'll probably just switch to Ninja which I predict won't have this issue. Failing all that I'll test out VSCMD_ARG_TGT_ARCH and see how it goes.

Thanks again for the info!

@alexcrichton
Copy link
Member

Updating CMake to use Ninja did the trick so it looks like it was indeed MSBuild setting variables since MSBuild didn't think it was cross-compiling.

wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Nov 30, 2024
Pkgsrc changes compared to rust182:
 * Remove patches related to rust-lang/rust#130110,
   which is now integrated upstream.
 * Remove patch to vendor/cc-1.0.79, now integrated in the current
   vendored cc crate.
 * Checksum updates.

TODO:
 * Cross-compilation fails ref.
   rust-lang/rust#133629

Upstream changes:

Version 1.83.0 (2024-11-28)
==========================

Language
--------
- [Stabilize `&mut`, `*mut`, `&Cell`, and `*const Cell` in const.]
  (rust-lang/rust#129195)
- [Allow creating references to statics in `const` initializers.]
  (rust-lang/rust#129759)
- [Implement raw lifetimes and labels (`'r#ident`).]
  (rust-lang/rust#126452)
- [Define behavior when atomic and non-atomic reads race.]
  (rust-lang/rust#128778)
- [Non-exhaustive structs may now be empty.]
  (rust-lang/rust#128934)
- [Disallow implicit coercions from places of type `!`]
  (rust-lang/rust#129392)
- [`const extern` functions can now be defined for other calling conventions.]
  (rust-lang/rust#129753)
- [Stabilize `expr_2021` macro fragment specifier in all editions.]
  (rust-lang/rust#129972)
- [The `non_local_definitions` lint now fires on less code and
  warns by default.]
  (rust-lang/rust#127117)

Compiler
--------
- [Deprecate unsound `-Csoft-float` flag.]
  (rust-lang/rust#129897)
- Add many new tier 3 targets:
    - [`aarch64_unknown_nto_qnx700`]
      (rust-lang/rust#127897)
    - [`arm64e-apple-tvos`]
      (rust-lang/rust#130614)
    - [`armv7-rtems-eabihf`]
      (rust-lang/rust#127021)
    - [`loongarch64-unknown-linux-ohos`]
      (rust-lang/rust#130750)
    - [`riscv32-wrs-vxworks` and `riscv64-wrs-vxworks`]
      (rust-lang/rust#130549)
    - [`riscv32{e|em|emc}-unknown-none-elf`]
      (rust-lang/rust#130555)
    - [`x86_64-unknown-hurd-gnu`]
      (rust-lang/rust#128345)
    - [`x86_64-unknown-trusty`]
      (rust-lang/rust#130453)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

Libraries
---------
- [Implement `PartialEq` for `ExitCode`.]
  (rust-lang/rust#127633)
- [Document that `catch_unwind` can deal with foreign exceptions
  without UB, although the exact behavior is unspecified.]
  (rust-lang/rust#128321)
- [Implement `Default` for `HashMap`/`HashSet` iterators that don't
  already have it.]
  (rust-lang/rust#128711)
- [Bump Unicode to version 16.0.0.]
  (rust-lang/rust#130183)
- [Change documentation of `ptr::add`/`sub` to not claim equivalence
  with `offset`.]
  (rust-lang/rust#130229).

Stabilized APIs
---------------

- [`BufRead::skip_until`]
  (https://doc.rust-lang.org/stable/std/io/trait.BufRead.html#method.skip_until)
- [`ControlFlow::break_value`]
  (https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.break_value)
- [`ControlFlow::continue_value`]
  (https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.continue_value)
- [`ControlFlow::map_break`]
  (https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.map_break)
- [`ControlFlow::map_continue`]
  (https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.map_continue)
- [`DebugList::finish_non_exhaustive`]
  (https://doc.rust-lang.org/stable/core/fmt/struct.DebugList.html#method.finish_non_exhaustive)
- [`DebugMap::finish_non_exhaustive`]
  (https://doc.rust-lang.org/stable/core/fmt/struct.DebugMap.html#method.finish_non_exhaustive)
- [`DebugSet::finish_non_exhaustive`]
  (https://doc.rust-lang.org/stable/core/fmt/struct.DebugSet.html#method.finish_non_exhaustive)
- [`DebugTuple::finish_non_exhaustive`]
  (https://doc.rust-lang.org/stable/core/fmt/struct.DebugTuple.html#method.finish_non_exhaustive)
- [`ErrorKind::ArgumentListTooLong`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.ArgumentListTooLong)
- [`ErrorKind::Deadlock`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.Deadlock)
- [`ErrorKind::DirectoryNotEmpty`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.DirectoryNotEmpty)
- [`ErrorKind::ExecutableFileBusy`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.ExecutableFileBusy)
- [`ErrorKind::FileTooLarge`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.FileTooLarge)
- [`ErrorKind::HostUnreachable`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.HostUnreachable)
- [`ErrorKind::IsADirectory`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.IsADirectory)
- [`ErrorKind::NetworkDown`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.NetworkDown)
- [`ErrorKind::NetworkUnreachable`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.NetworkUnreachable)
- [`ErrorKind::NotADirectory`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.NotADirectory)
- [`ErrorKind::NotSeekable`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.NotSeekable)
- [`ErrorKind::ReadOnlyFilesystem`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.ReadOnlyFilesystem)
- [`ErrorKind::ResourceBusy`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.ResourceBusy)
- [`ErrorKind::StaleNetworkFileHandle`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.StaleNetworkFileHandle)
- [`ErrorKind::StorageFull`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.StorageFull)
- [`ErrorKind::TooManyLinks`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.TooManyLinks)
- [`Option::get_or_insert_default`]
  (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.get_or_insert_default)
- [`Waker::data`]
  (https://doc.rust-lang.org/stable/core/task/struct.Waker.html#method.data)
- [`Waker::new`]
  (https://doc.rust-lang.org/stable/core/task/struct.Waker.html#method.new)
- [`Waker::vtable`]
  (https://doc.rust-lang.org/stable/core/task/struct.Waker.html#method.vtable)
- [`char::MIN`]
  (https://doc.rust-lang.org/stable/core/primitive.char.html#associatedconstant.MIN)
- [`hash_map::Entry::insert_entry`]
  (https://doc.rust-lang.org/stable/std/collections/hash_map/enum.Entry.html#method.insert_entry)
- [`hash_map::VacantEntry::insert_entry`]
  (https://doc.rust-lang.org/stable/std/collections/hash_map/struct.VacantEntry.html#method.insert_entry)

These APIs are now stable in const contexts:

- [`Cell::into_inner`]
  (https://doc.rust-lang.org/stable/core/cell/struct.Cell.html#method.into_inner)
- [`Duration::as_secs_f32`]
  (https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.as_secs_f32)
- [`Duration::as_secs_f64`]
  (https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.as_secs_f64)
- [`Duration::div_duration_f32`]
  (https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.div_duration_f32)
- [`Duration::div_duration_f64`]
  (https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.div_duration_f64)
- [`MaybeUninit::as_mut_ptr`]
  (https://doc.rust-lang.org/stable/core/mem/union.MaybeUninit.html#method.as_mut_ptr)
- [`NonNull::as_mut`]
  (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.as_mut)
- [`NonNull::copy_from`]
  (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.copy_from)
- [`NonNull::copy_from_nonoverlapping`]
  (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.copy_from_nonoverlapping)
- [`NonNull::copy_to`]
  (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.copy_to)
- [`NonNull::copy_to_nonoverlapping`]
  (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.copy_to_nonoverlapping)
- [`NonNull::slice_from_raw_parts`]
  (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.slice_from_raw_parts)
- [`NonNull::write`]
  (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.write)
- [`NonNull::write_bytes`]
  (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.write_bytes)
- [`NonNull::write_unaligned`]
  (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.write_unaligned)
- [`OnceCell::into_inner`]
  (https://doc.rust-lang.org/stable/core/cell/struct.OnceCell.html#method.into_inner)
- [`Option::as_mut`]
  (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.as_mut)
- [`Option::expect`]
  (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.expect)
- [`Option::replace`]
  (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.replace)
- [`Option::take`]
  (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.take)
- [`Option::unwrap`]
  (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.unwrap)
- [`Option::unwrap_unchecked`]
  (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.unwrap_unchecked)
- [`Option::<&_>::copied`]
  (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.copied)
- [`Option::<&mut _>::copied`]
  (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.copied-1)
- [`Option::<Option<_>>::flatten`]
  (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.flatten)
- [`Option::<Result<_, _>>::transpose`]
  (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.transpose)
- [`RefCell::into_inner`]
  (https://doc.rust-lang.org/stable/core/cell/struct.RefCell.html#method.into_inner)
- [`Result::as_mut`]
  (https://doc.rust-lang.org/stable/core/result/enum.Result.html#method.as_mut)
- [`Result::<&_, _>::copied`]
  (https://doc.rust-lang.org/stable/core/result/enum.Result.html#method.copied)
- [`Result::<&mut _, _>::copied`]
  (https://doc.rust-lang.org/stable/core/result/enum.Result.html#method.copied-1)
- [`Result::<Option<_>, _>::transpose`]
  (https://doc.rust-lang.org/stable/core/result/enum.Result.html#method.transpose)
- [`UnsafeCell::get_mut`]
  (https://doc.rust-lang.org/stable/core/cell/struct.UnsafeCell.html#method.get_mut)
- [`UnsafeCell::into_inner`]
  (https://doc.rust-lang.org/stable/core/cell/struct.UnsafeCell.html#method.into_inner)
- [`array::from_mut`]
  (https://doc.rust-lang.org/stable/core/array/fn.from_mut.html)
- [`char::encode_utf8`]
  (https://doc.rust-lang.org/stable/core/primitive.char.html#method.encode_utf8)
- [`{float}::classify`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.classify)
- [`{float}::is_finite`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_finite)
- [`{float}::is_infinite`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_infinite)
- [`{float}::is_nan`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_nan)
- [`{float}::is_normal`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_normal)
- [`{float}::is_sign_negative`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_sign_negative)
- [`{float}::is_sign_positive`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_sign_positive)
- [`{float}::is_subnormal`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_subnormal)
- [`{float}::from_bits`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.from_bits)
- [`{float}::from_be_bytes`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.from_be_bytes)
- [`{float}::from_le_bytes`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.from_le_bytes)
- [`{float}::from_ne_bytes`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.from_ne_bytes)
- [`{float}::to_bits`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.to_bits)
- [`{float}::to_be_bytes`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.to_be_bytes)
- [`{float}::to_le_bytes`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.to_le_bytes)
- [`{float}::to_ne_bytes`]
  (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.to_ne_bytes)
- [`mem::replace`]
  (https://doc.rust-lang.org/stable/core/mem/fn.replace.html)
- [`ptr::replace`]
  (https://doc.rust-lang.org/stable/core/ptr/fn.replace.html)
- [`ptr::slice_from_raw_parts_mut`]
  (https://doc.rust-lang.org/stable/core/ptr/fn.slice_from_raw_parts_mut.html)
- [`ptr::write`]
  (https://doc.rust-lang.org/stable/core/ptr/fn.write.html)
- [`ptr::write_unaligned`]
  (https://doc.rust-lang.org/stable/core/ptr/fn.write_unaligned.html)
- [`<*const _>::copy_to`]
  (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_to)
- [`<*const _>::copy_to_nonoverlapping`]
  (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_to_nonoverlapping)
- [`<*mut _>::copy_from`]
  (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_from)
- [`<*mut _>::copy_from_nonoverlapping`]
  (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_from_nonoverlapping)
- [`<*mut _>::copy_to`]
  (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_to-1)
- [`<*mut _>::copy_to_nonoverlapping`]
  (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_to_nonoverlapping-1)
- [`<*mut _>::write`]
  (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.write)
- [`<*mut _>::write_bytes`]
  (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.write_bytes)
- [`<*mut _>::write_unaligned`]
  (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.write_unaligned)
- [`slice::from_mut`]
  (https://doc.rust-lang.org/stable/core/slice/fn.from_mut.html)
- [`slice::from_raw_parts_mut`]
  (https://doc.rust-lang.org/stable/core/slice/fn.from_raw_parts_mut.html)
- [`<[_]>::first_mut`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.first_mut)
- [`<[_]>::last_mut`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.last_mut)
- [`<[_]>::first_chunk_mut`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.first_chunk_mut)
- [`<[_]>::last_chunk_mut`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.last_chunk_mut)
- [`<[_]>::split_at_mut`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_at_mut)
- [`<[_]>::split_at_mut_checked`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_at_mut_checked)
- [`<[_]>::split_at_mut_unchecked`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_at_mut_unchecked)
- [`<[_]>::split_first_mut`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_first_mut)
- [`<[_]>::split_last_mut`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_last_mut)
- [`<[_]>::split_first_chunk_mut`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_first_chunk_mut)
- [`<[_]>::split_last_chunk_mut`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_last_chunk_mut)
- [`str::as_bytes_mut`]
  (https://doc.rust-lang.org/stable/core/primitive.str.html#method.as_bytes_mut)
- [`str::as_mut_ptr`]
  (https://doc.rust-lang.org/stable/core/primitive.str.html#method.as_mut_ptr)
- [`str::from_utf8_unchecked_mut`]
  (https://doc.rust-lang.org/stable/core/str/fn.from_utf8_unchecked_mut.html)

Cargo
-----
- [Introduced a new `CARGO_MANIFEST_PATH` environment variable,
  similar to `CARGO_MANIFEST_DIR` but pointing directly to the manifest
  file.]
  (rust-lang/cargo#14404)
- [Added `package.autolib` to the manifest, allowing `[lib]`
  auto-discovery to be disabled.]
  (rust-lang/cargo#14591)
- [Declare support level for each crate in Cargo's Charter / crate docs.]
  (rust-lang/cargo#14600)
- [Declare new Intentional Artifacts as 'small' changes.]
  (rust-lang/cargo#14599)

Rustdoc
-------

- [The sidebar / hamburger menu table of contents now includes the
  `# headers` from the main item's doc comment]
  (rust-lang/rust#120736). This is similar
  to a third-party feature provided by the rustdoc-search-enhancements
  browser extension.

Compatibility Notes
-------------------
- [Warn against function pointers using unsupported ABI strings.]
  (rust-lang/rust#128784)
- [Check well-formedness of the source type's signature in fn
  pointer casts.]
  (rust-lang/rust#129021) This partly closes
  a soundness hole that comes when casting a function item to
  function pointer
- [Use equality instead of subtyping when resolving type dependent paths.]
  (rust-lang/rust#129073)
- Linking on macOS now correctly includes Rust's default deployment
  target. Due to a linker bug, you might have to pass
  `MACOSX_DEPLOYMENT_TARGET` or fix your `#[link]` attributes to
  point to the correct frameworks. See
  <rust-lang/rust#129369>.
- [Rust will now correctly raise an error for `repr(Rust)` written
  on non-`struct`/`enum`/`union` items, since it previous did not
  have any effect.]
  (rust-lang/rust#129422)
- The future incompatibility lint `deprecated_cfg_attr_crate_type_name`
  [has been made into a hard error]
  (rust-lang/rust#129670). It was used to
  deny usage of `#![crate_type]` and `#![crate_name]` attributes in
  `#![cfg_attr]`, which required a hack in the compiler to be able
  to change the used crate type and crate name after cfg expansion.
  Users can use `--crate-type` instead of `#![cfg_attr(..., crate_type
  = "...")]` and `--crate-name` instead of `#![cfg_attr(...,
  crate_name = "...")]` when running `rustc`/`cargo rustc` on the
  command line.  Use of those two attributes outside of `#![cfg_attr]`
  continue to be fully supported.

- Until now, paths into the sysroot were always prefixed with
  `/rustc/$hash` in diagnostics, codegen, backtrace, e.g.
    ```
    thread 'main' panicked at 'hello world', map-panic.rs:2:50
    stack backtrace:
       0: std::panicking::begin_panic
                 at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:616:12
       1: map_panic::main::{{closure}}
                 at ./map-panic.rs:2:50
       2: core::option::Option<T>::map
                 at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/option.rs:929:29
       3: map_panic::main
                 at ./map-panic.rs:2:30
       4: core::ops::function::FnOnce::call_once
                 at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/ops/function.rs:248:5
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    ```
  [RFC 3127 said]
  (https://rust-lang.github.io/rfcs/3127-trim-paths.html#changing-handling-of-sysroot-path-in-rustc)
  > We want to change this behaviour such that, when `rust-src`
    source files can be discovered, the virtual path is discarded
    and therefore the local path will be embedded, unless there is
    a `--remap-path-prefix` that causes this local path to be remapped
    in the usual way.

    [#129687](rust-lang/rust#129687)
    implements this behaviour, when `rust-src` is present at compile
    time, `rustc` replaces `/rustc/$hash` with a real path into
    the local `rust-src` component with best effort.  To sanitize
    this, users must explicitly supply `--remap-path-prefix=<path
    to rust-src>=foo` or not have the `rust-src` component installed.
- The allow-by-default `missing_docs` lint used to disable itself
  when invoked through `rustc --test`/`cargo test`, resulting in
  `#[expect(missing_docs)]` emitting false positives due to the
  expectation being wrongly unfulfilled. This behavior [has now been
  removed]
  (rust-lang/rust#130025), which allows
  `#[expect(missing_docs)]` to be fulfilled in all scenarios, but
  will also report new `missing_docs` diagnostics for publicly
  reachable `#[cfg(test)]` items, [integration test]
  (https://doc.rust-lang.org/cargo/reference/cargo-targets.html#integration-tests)
  crate-level documentation, and publicly reachable items in
  integration tests.
- [The `armv8r-none-eabihf` target now uses the Armv8-R required
  set of floating-point features.]
  (rust-lang/rust#130295)
- [Fix a soundness bug where rustc wouldn't detect unconstrained
  higher-ranked lifetimes in a `dyn Trait`'s associated types that
  occur due to supertraits.]
  (rust-lang/rust#130367)
- [Update the minimum external LLVM version to 18.]
  (rust-lang/rust#130487)
- [Remove `aarch64-fuchsia` and `x86_64-fuchsia` target aliases in
  favor of `aarch64-unknown-fuchsia` and `x86_64-unknown-fuchsia`
  respectively.]
  (rust-lang/rust#130657)
- [The ABI-level exception class of a Rust panic is now encoded
  with native-endian bytes, so it is legible in hex dumps.]
  (rust-lang/rust#130897)
- [Visual Studio 2013 is no longer supported for MSVC targets.]
  (rust-lang/rust#131070)
- [The sysroot no longer contains the `std` dynamic library in its
  top-level `lib/` dir.]
  (rust-lang/rust#131188)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CI-spurious-fail-msvc CI spurious failure: target env msvc merged-by-bors This PR was explicitly merged by bors. relnotes Marks issues that should be documented in the release notes of the next release. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants