Add wasm32v1-none target (compiler-team/#791) by graydon · Pull Request #131487 · rust-lang/rust (original) (raw)
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 andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Conversation44 Commits4 Checks6 Files changed
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
[ Show hidden characters]({{ revealButtonHref }})
This is a preliminary implementation of the MCP discussed in compiler-team#791. It's not especially "major" but you know, process! Anyway it adds a new wasm32v1-none target which just pins down a set of wasm features. I think this is close to the consensus that emerged when discussing it on Zulip so I figured I'd sketch to see how hard it is. Turns out not very.
r? @Nadrieril
rustbot has assigned @Nadrieril.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.
Use r?
to explicitly pick a reviewer
rustbot added S-waiting-on-review
Status: Awaiting review from the assignee but also interested parties.
Relevant to the compiler team, which will review and decide on the PR/issue.
labels
This comment has been minimized.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
graydon marked this pull request as ready for review
Some changes occurred in src/doc/rustc/src/platform-support
cc @Noratrieb
These commits modify compiler targets.
(See the Target Tier Policy.)
This comment has been minimized.
rustbot added A-testsuite
Area: The testsuite used to check the correctness of rustc
Relevant to the infrastructure team, which will review and decide on the PR/issue.
labels
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oops sorry I wrote these comments last week but forgot to hit submit...
Otherwise though the MCP has now finished so with this it looks good to me and would be happy to approve.
$ rustc -target wasm32v1-none |
---|
``` |
The difference is in how the `core` and `alloc` crates are compiled for distribution with the toolchain, and whether it works on _stable_ Rust toolchains or requires _nightly_ ones. Again referring back to the [`wasm32-unknown-unknown` document](./wasm32-unknown-unknown.md), note that to disable all post-MVP proposals on that target one _actually_ has to compile with this: |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you're feeling up for it (optional as I'm happy to do this later too), mind updating the docs in wasm32-unknown-unknown.md
with respect to this new target? For example the documentation can indicate how to disable default features both with -Zbuild-std
but also referring to this target primarily. The -Zbuild-std
bits aren't really need any more unless you really want the standard library of wasm32-unknown-unknown
which is probably unlikely.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll add a note, but I think the build-std part needs to stay if you're targeting MVP and not MVP+mutable-globals as the wasm32v1 target supplies. Or if you need std.
@@ -1803,6 +1803,7 @@ supported_targets! { |
---|
("wasm32-unknown-emscripten", wasm32_unknown_emscripten), |
("wasm32-unknown-unknown", wasm32_unknown_unknown), |
("wasm32v1-none", wasm32v1_none), |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will the way to cfg on this specific target be to specify:
#[cfg(all(target_family = "wasm", target_os = "none"))]
or
#[cfg(all(target_arch = "wasm32", target_os = "none"))]
If in the future a wasm32v2-none
is released, how will it be distinguished in a cfg
?
Or will the target_arch
be wasm32v1
and in the future wasm32v2
?
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can just differentiate them through the target features.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FWIW the documentation in this PR has an answer to your original question:
It's recommended to conditionally compile code for this target with:
#[cfg(all(target_family = "wasm", target_os = "none"))]
Otherwise I would also agree with @CryZe. All other native platforms have a constant target_arch
string with a variable target_feature
set corresponding to levels of support for various features.
The situation you're referring to where multivalue
and reference-types
aren't stable right now isn't an issue for this target. This'll be a new target when it lands and users should also be able to see multivalue
and reference-types
when they get to use it since that PR should land relatively soon as well.
Stabilization of wasm features has lagged behind for awhile and this is basically good motivation to ensure we keep up in the future. For example another option is blocking a hypothetical wasm32v2-none
target until all of the features it enables are landed and stable in Rust. (or, for example, blocking this PR on #131080 but to be clear I'm not advocating we do that)
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will the target_env
be set to v1
or v2
?
For example, the following cfg to unambiguously distinguish the target:
#[cfg(all(target_arch = "wasm32", target_env = "v1", target_os = "none"))]
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As Alex said: The incentive structure that encourages people to push for stabilizing a target feature name that is well-defined, so that we can e.g. evaluate it for its ABI impacts, is intentional.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think what @leighmcculloch is looking for is a way to make a cfg check that specifically identifies the condition of "being limited to the features in wasm32v1-none
". Like he wants to not detect any specific new features, but detect the absence of all new features, including features not-yet-invented. Because that's the only case we want to compile for. We want to emit an error if the user tries to build for a target that enables any further wasm features. Which -- even if the current set of feature names all stabilize -- he can't write code to detect because they don't exist yet.
If there were -- speaking hypothetically -- some way to say cfg(target_triple="wasm32v1-none")
or even cfg(target_subarch="wasm32v1")
that would do the trick. Or anything else that pins to this subarch version and not future versions. I'm not sure if there's a good way to make that happen with the tools currently available though.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe there is nonesuch in "ways to conveniently do that", yes.
The answer, however, is cfg(target_feature = "nontrapping-fptoint")
, or the cfg(not())
version.
The reason that will work is that feature was specifically added for Rust, and it is part of the v2 definition, so "post v1" Rust targets simply will not ever exclude it.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unless you're asking for "and no 'manual' use of any target_feature
anywhere, either", which is:
- not about the target tuple
- much closer to "just plain impossible" due to source-level
target_feature(enable = "feature")
being possible
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mhm. Thanks. I'm sure we'll figure out some not-so-bad guardrails that handle the majority of cases.
📌 Commit b0f0282 has been approved by alexcrichton
It is now in the queue for this repository.
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
bors added a commit to rust-lang-ci/rust that referenced this pull request
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request
Rollup merge of rust-lang#131487 - graydon:wasm32v1-none, r=alexcrichton
Add wasm32v1-none target (compiler-team/rust-lang#791)
This is a preliminary implementation of the MCP discussed in compiler-team#791. It's not especially "major" but you know, process! Anyway it adds a new wasm32v1-none target which just pins down a set of wasm features. I think this is close to the consensus that emerged when discussing it on Zulip so I figured I'd sketch to see how hard it is. Turns out not very.
We're thinking of switching to this target in our code-base once it reaches stable, but another developer had questions.
- is
std::
accessible (even if it only re-exports stuff fromcore::
)- is
std::sync:Mutex
available- are functional parts like
std::path::Path
orstd::time::Duration
available
and, if any/all of these are
false
:
- can we manually, easily re-enable
std
to function exactly the same as it does onwasm32-unknown-unknown
The code-base, for reference, is https://github.com/ruffle-rs/ruffle. I'll also add that we prefer to do everything with stable Rust.
In testing, I got these errors:
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
= help: consider building the standard library from source with `cargo build -Zbuild-std`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `cfg-if` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
= help: consider building the standard library from source with `cargo build -Zbuild-std`
@danielhjacobs there's no std
, so no Mutex
or Path
or Duration
. There's no means by which to re-enable std
for this target unless you're using -Zbuild-std
, at which point you can also use wasm32-unknown-unknown
.
For the build error, I think that's still something using --target wasm32-unknown-unknown
which needs to switch to wasm32v1-none
, but if you need std
to work then this target won't work for you
Hi Alex. That's unfortunate, we were hoping to keep Ruffle working on Pale Moon and on old versions of Safari before the reference types proposal was supported. We can't do that without pinning to Rust 1.81.0 or using nightly Rust, which we don't want to do. rustwasm/wasm-bindgen#4213 will cause wasm-bindgen to at least generate JS glue code that doesn't use those features, but the statement that "For the reference-types feature the encoding of immediates in the call_indirect, a commonly used instruction by the WebAssembly backend, has changed. Validators and parsers which don't understand the reference-types proposal will no longer accept modules produced by LLVM due to this change in encoding of immediates." makes me wary Ruffle will work on those browsers even after that wasm-bindgen PR is out in a new release.
I assume there's no chance to get a target like this but which builds std
?
Note that I think I fixed the references to wasm32-unknown-unknown
and now I'm getting these errors:
error[E0463]: can't find crate for
core
Does this mean core is also unavailable on this target?
I assume there's no chance to get a target like this but which builds
std
?
Probably Not. We do not really want to entertain another target that has a standard library as busted as wasm32-unknown-unknown's is.
but the statement that "For the reference-types feature the encoding of immediates in the call_indirect, a commonly used instruction by the WebAssembly backend, has changed. Validators and parsers which don't understand the reference-types proposal will no longer accept modules produced by LLVM due to this change in encoding of immediates." makes me wary Ruffle will work on those browsers even after that wasm-bindgen PR is out in a new release.
Using this target, plus the relevant wasm tooling with that "don't enable externref
automatically" PR merged, should generate correct code for your use-case that is recognized by Pale Moon and old Safari.
The errors in the log you showed are from using crates with features enabled that cause them to not support no_std
. As the once_cell
crate supports using it on no_std
, and I did not see any direct dependencies on it in your tree's Cargo.tomls, it is the result of other crates you depend on.
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request
This MR contains the following updates:
Package | Update | Change |
---|---|---|
rust | minor | 1.83.0 -> 1.84.0 |
MR created with the help of el-capitano/tools/renovate-bot.
Proposed changes to behavior should be submitted there as MRs.
Release Notes
rust-lang/rust (rust)
v1.84.0
==========================
Language
- Allow
#[deny]
inside#[forbid]
as a no-op - Show a warning when
-Ctarget-feature
is used to toggle features that can lead to unsoundness due to ABI mismatches - Use the next-generation trait solver in coherence
- Allow coercions to drop the principal of trait objects
- Support
/
as the path separator forinclude!()
in all cases on Windows - Taking a raw ref (
raw (const|mut)
) of a deref of a pointer (*ptr
) is now safe - Stabilize s390x inline assembly
- Stabilize Arm64EC inline assembly
- Lint against creating pointers to immediately dropped temporaries
- Execute drop glue when unwinding in an
extern "C"
function
Compiler
- Add
--print host-tuple
flag to print the host target tuple and affirm the "target tuple" terminology over "target triple" - Declaring functions with a calling convention not supported on the current target now triggers a hard error
- Set up indirect access to external data for
loongarch64-unknown-linux-{musl,ohos}
- Enable XRay instrumentation for LoongArch Linux targets
- Extend the
unexpected_cfgs
lint to also warn in external macros - Stabilize WebAssembly
multivalue
,reference-types
, andtail-call
target features - Added Tier 2 support for the
wasm32v1-none
target
Libraries
- Implement
From<&mut {slice}>
forBox/Rc/Arc<{slice}>
- Move
<float>::copysign
,<float>::abs
,<float>::signum
tocore
- Add
LowerExp
andUpperExp
implementations toNonZero
- Implement
FromStr
forCString
andTryFrom<CString>
forString
std::os::darwin
has been made public
Stabilized APIs
Ipv6Addr::is_unique_local
Ipv6Addr::is_unicast_link_local
core::ptr::with_exposed_provenance
core::ptr::with_exposed_provenance_mut
<ptr>::addr
<ptr>::expose_provenance
<ptr>::with_addr
<ptr>::map_addr
<int>::isqrt
<int>::checked_isqrt
<uint>::isqrt
NonZero::isqrt
core::ptr::without_provenance
core::ptr::without_provenance_mut
core::ptr::dangling
core::ptr::dangling_mut
Pin::as_deref_mut
These APIs are now stable in const contexts
AtomicBool::from_ptr
AtomicPtr::from_ptr
AtomicU8::from_ptr
AtomicU16::from_ptr
AtomicU32::from_ptr
AtomicU64::from_ptr
AtomicUsize::from_ptr
AtomicI8::from_ptr
AtomicI16::from_ptr
AtomicI32::from_ptr
AtomicI64::from_ptr
AtomicIsize::from_ptr
<ptr>::is_null
<ptr>::as_ref
<ptr>::as_mut
Pin::new
Pin::new_unchecked
Pin::get_ref
Pin::into_ref
Pin::get_mut
Pin::get_unchecked_mut
Pin::static_ref
Pin::static_mut
Cargo
Rustdoc
Compatibility Notes
- Enable by default the
LSX
target feature for LoongArch Linux targets - The unstable
-Zprofile
flag (“gcov-style” coverage instrumentation) has been removed. This does not affect the stable flags for coverage instrumentation (-Cinstrument-coverage
) and profile-guided optimization (-Cprofile-generate
,-Cprofile-use
), which are unrelated and remain available. - Support for the target named
wasm32-wasi
has been removed as the target is now namedwasm32-wasip1
. This completes the transition plan for this target following the introduction ofwasm32-wasip1
in Rust 1.78. Compiler warnings on use ofwasm32-wasi
introduced in Rust 1.81 are now gone as well as the target is removed. - [The syntax
&pin (mut|const) T
is now parsed as a type which in theory could affect macro expansion results in some edge cases](rust-lang/rust#130635 (comment)) - [Legacy syntax for calling
std::arch
functions is no longer permitted to declare items or bodies (such as closures, inline consts, or async blocks).](rust-lang/rust#130443 (comment)) - Declaring functions with a calling convention not supported on the current target now triggers a hard error
- The next-generation trait solver is now enabled for coherence, fixing multiple soundness issues
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this MR and you won't be reminded about this update again.
- If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request
Pkgsrc changes:
- Adapt patches, one of the patched files were restructured upstream.
- Checksum changes.
Upstream changes:
Version 1.84.1 (2025-01-30)
- [Fix ICE 132920 in duplicate-crate diagnostics.] (rust-lang/rust#133304)
- [Fix errors for overlapping impls in incremental rebuilds.] (rust-lang/rust#133828)
- [Fix slow compilation related to the next-generation trait solver.] (rust-lang/rust#135618)
- [Fix debuginfo when LLVM's location discriminator value limit is exceeded.] (rust-lang/rust#135643)
- Fixes for building Rust from source:
- [Only try to distribute
llvm-objcopy
if llvm tools are enabled.] (rust-lang/rust#134240) - [Add Profile Override for Non-Git Sources.] (rust-lang/rust#135433)
- [Resolve symlinks of LLVM tool binaries before copying them.] (rust-lang/rust#135585)
- [Make it possible to use ci-rustc on tarball sources.] (rust-lang/rust#135722)
- [Only try to distribute
Version 1.84.0 (2025-01-09)
Language
- [Allow
#[deny]
inside#[forbid]
as a no-op] (rust-lang/rust#121560) - [Show a warning when
-Ctarget-feature
is used to toggle features that can lead to unsoundness due to ABI mismatches] (rust-lang/rust#129884) - [Use the next-generation trait solver in coherence] (rust-lang/rust#130654)
- [Allow coercions to drop the principal of trait objects] (rust-lang/rust#131857)
- [Support
/
as the path separator forinclude!()
in all cases on Windows] (rust-lang/rust#125205) - [Taking a raw ref (
raw (const|mut)
) of a deref of a pointer (*ptr
) is now safe] (rust-lang/rust#129248) - [Stabilize s390x inline assembly] (rust-lang/rust#131258)
- [Stabilize Arm64EC inline assembly] (rust-lang/rust#131781)
- [Lint against creating pointers to immediately dropped temporaries] (rust-lang/rust#128985)
- [Execute drop glue when unwinding in an
extern "C"
function] (rust-lang/rust#129582)
Compiler
- [Add
--print host-tuple
flag to print the host target tuple and affirm the "target tuple" terminology over "target triple"] (rust-lang/rust#125579) - [Declaring functions with a calling convention not supported on the current target now triggers a hard error] (rust-lang/rust#129935)
- [Set up indirect access to external data for
loongarch64-unknown-linux-{musl,ohos}
] (rust-lang/rust#131583) - [Enable XRay instrumentation for LoongArch Linux targets] (rust-lang/rust#131818)
- [Extend the
unexpected_cfgs
lint to also warn in external macros] (rust-lang/rust#132577) - [Stabilize WebAssembly
multivalue
,reference-types
, andtail-call
target features] (rust-lang/rust#131080) - [Added Tier 2 support for the
wasm32v1-none
target] (rust-lang/rust#131487)
Libraries
- [Implement
From<&mut {slice}>
forBox/Rc/Arc<{slice}>
] (rust-lang/rust#129329) - [Move
<float>::copysign
,<float>::abs
,<float>::signum
tocore
] (rust-lang/rust#131304) - [Add
LowerExp
andUpperExp
implementations toNonZero
] (rust-lang/rust#131377) - [Implement
FromStr
forCString
andTryFrom<CString>
forString
] (rust-lang/rust#130608) - [
std::os::darwin
has been made public] (rust-lang/rust#130635)
Stabilized APIs
- [
Ipv6Addr::is_unique_local
] (https://doc.rust-lang.org/stable/core/net/struct.Ipv6Addr.html#method.is_unique_local) - [
Ipv6Addr::is_unicast_link_local
] (https://doc.rust-lang.org/stable/core/net/struct.Ipv6Addr.html#method.is_unicast_link_local) - [
core::ptr::with_exposed_provenance
] (https://doc.rust-lang.org/stable/core/ptr/fn.with_exposed_provenance.html) - [
core::ptr::with_exposed_provenance_mut
] (https://doc.rust-lang.org/stable/core/ptr/fn.with_exposed_provenance_mut.html) - [
<ptr>::addr
] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.addr) - [
<ptr>::expose_provenance
] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.expose_provenance) - [
<ptr>::with_addr
] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.with_addr) - [
<ptr>::map_addr
] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.map_addr) - [
<int>::isqrt
] (https://doc.rust-lang.org/stable/core/primitive.i32.html#method.isqrt) - [
<int>::checked_isqrt
] (https://doc.rust-lang.org/stable/core/primitive.i32.html#method.checked_isqrt) - [
<uint>::isqrt
] (https://doc.rust-lang.org/stable/core/primitive.u32.html#method.isqrt) - [
NonZero::isqrt
] (https://doc.rust-lang.org/stable/core/num/struct.NonZero.html#impl-NonZero%3Cu128%3E/method.isqrt) - [
core::ptr::without_provenance
] (https://doc.rust-lang.org/stable/core/ptr/fn.without_provenance.html) - [
core::ptr::without_provenance_mut
] (https://doc.rust-lang.org/stable/core/ptr/fn.without_provenance_mut.html) - [
core::ptr::dangling
] (https://doc.rust-lang.org/stable/core/ptr/fn.dangling.html) - [
core::ptr::dangling_mut
] (https://doc.rust-lang.org/stable/core/ptr/fn.dangling_mut.html)
These APIs are now stable in const contexts
- [
AtomicBool::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicBool.html#method.from_ptr) - [
AtomicPtr::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicPtr.html#method.from_ptr) - [
AtomicU8::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicU8.html#method.from_ptr) - [
AtomicU16::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicU16.html#method.from_ptr) - [
AtomicU32::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicU32.html#method.from_ptr) - [
AtomicU64::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicU64.html#method.from_ptr) - [
AtomicUsize::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicUsize.html#method.from_ptr) - [
AtomicI8::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicI8.html#method.from_ptr) - [
AtomicI16::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicI16.html#method.from_ptr) - [
AtomicI32::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicI32.html#method.from_ptr) - [
AtomicI64::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicI64.html#method.from_ptr) - [
AtomicIsize::from_ptr
] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicIsize.html#method.from_ptr) - [
<ptr>::is_null
] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.is_null-1) - [
<ptr>::as_ref
] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.as_ref-1) - [
<ptr>::as_mut
] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.as_mut) - [
Pin::new
] (https://doc.rust-lang.org/stable/core/pin/struct.Pin.html#method.new) - [
Pin::new_unchecked
] (https://doc.rust-lang.org/stable/core/pin/struct.Pin.html#method.new_unchecked) - [
Pin::get_ref
] (https://doc.rust-lang.org/stable/core/pin/struct.Pin.html#method.get_ref) - [
Pin::into_ref
] (https://doc.rust-lang.org/stable/core/pin/struct.Pin.html#method.into_ref) - [
Pin::get_mut
] (https://doc.rust-lang.org/stable/core/pin/struct.Pin.html#method.get_mut) - [
Pin::get_unchecked_mut
] (https://doc.rust-lang.org/stable/core/pin/struct.Pin.html#method.get_unchecked_mut) - [
Pin::static_ref
] (https://doc.rust-lang.org/stable/core/pin/struct.Pin.html#method.static_ref) - [
Pin::static_mut
] (https://doc.rust-lang.org/stable/core/pin/struct.Pin.html#method.static_mut)
Cargo
- [Stabilize MSRV-aware resolver config] (rust-lang/cargo#14639)
- [Stabilize resolver v3] (rust-lang/cargo#14754)
Rustdoc
- [rustdoc-search: improve type-driven search] (rust-lang/rust#127589)
Compatibility Notes
- [Enable by default the
LSX
target feature for LoongArch Linux targets] (rust-lang/rust#132140) - The unstable
-Zprofile
flag ("gcov-style" coverage instrumentation) has been removed. This does not affect the stable flags for coverage instrumentation (-Cinstrument-coverage
) and profile-guided optimization (-Cprofile-generate
,-Cprofile-use
), which are unrelated and remain available. - Support for the target named
wasm32-wasi
has been removed as the target is now namedwasm32-wasip1
. This completes the [transition] (rust-lang/compiler-team#607) plan for this target following [the introduction ofwasm32-wasip1
] (rust-lang/rust#120468) in Rust 1.78. Compiler warnings on [use ofwasm32-wasi
] (rust-lang/rust#126662) introduced in Rust 1.81 are now gone as well as the target is removed. - [The syntax
&pin (mut|const) T
is now parsed as a type which in theory could affect macro expansion results in some edge cases] (rust-lang/rust#130635 (comment)) - [Legacy syntax for calling
std::arch
functions is no longer permitted to declare items or bodies (such as closures, inline consts, or async blocks).] (rust-lang/rust#130443 (comment)) - The
wasm32-unknown-emscripten
target's binary release of the standard library is now [built with the latest emsdk 3.1.68] (rust-lang/rust#131533), which fixes an ABI-incompatibility with Emscripten >= 3.1.42. If you are locally using a version of emsdk with an incompatible ABI (e.g. before 3.1.42 or a future one), you should build your code with-Zbuild-std
to ensure thatstd
uses the correct ABI. - [Declaring functions with a calling convention not supported on the current target now triggers a hard error] (rust-lang/rust#129935)
- [The next-generation trait solver is now enabled for coherence, fixing multiple soundness issues] (rust-lang/rust#130654)
Labels
Area: The testsuite used to check the correctness of rustc
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Relevant to the compiler team, which will review and decide on the PR/issue.
Relevant to the infrastructure team, which will review and decide on the PR/issue.