rust
rust copied to clipboard
Stabilize Wasm target features that are in phase 4 and 5
This stabilizes the Wasm target features that are known to be working and in phase 4 and 5.
Feature stabilized:
- Non-trapping float-to-int conversions
- Import/Export of Mutable Globals
- Sign-extension operators
- Bulk memory operations
- Extended Constant Expressions
Features not stabilized:
- Multi-value: requires rebuilding
std#73755. - Reference Types: no point stabilizing without #103516.
- Threads: requires rebuilding
std#77839. - Relaxed SIMD: separate PR #117468.
- Multi Memory: not implemented.
See https://github.com/rust-lang/rust/pull/117457#issuecomment-1787648070 for more context.
Documentation: https://github.com/rust-lang/reference/pull/1420 Tracking issue: https://github.com/rust-lang/rust/issues/44839
r? @cjgillot
(rustbot has picked a reviewer for you, use r? to override)
Cc @alexcrichton.
AFAIK a stabilization policy is not documented anywhere for WebAssembly target features, but in my opinion this is a good PR to land.
As a bit of background on this in case anyone's curious: WebAssembly target features in LLVM relate to WebAssembly proposals and are frequently named after those proposals. WebAssembly proposals go through a phased design process similar to JS and once a feature reaches "phase 4" it's effectively done and ready for everyone to use. That's when browsers start shipping the feature ungated for example. There is no "standard" for what to call these proposals beyond "toolchain conventions" which, at this time, is "whatever LLVM called it". In that sense the choice of feature name here matches what one would use on the command line for C/C++ when compiling WebAssembly.
This particular proposal, along with others, as pointed out, is "stage 5" which means it's long since done and overdue for stabilization on our end.
@alexcrichton do you mind taking the review?
I decided to add the remaining features into the same PR as they don't require any further work in the Rust compiler.
@alexcrichton can you clarify the impact of stabilizing these items? What impact does it have on what Rust code people are allowed to write? Do these affect the quality of codegen only? Does that imply that a broader set of Rust code will compile on the wasm target? How do people specify which target features they want to be using?
I'm generally in favor of doing this, but it would be good to understand what exactly it means.
In particular I am also trying to figure out if this is T-compiler, T-lang, or both in terms of who needs to commit to stabilization.
@rfcbot fcp merge
I am going to assume that this is both a lang and compiler RFC, and hence I move to merge, based on what @alexcrichton had to say here. Here is my understanding of what we are stabilizing:
- The ability to specify a certain set of webassembly features. These features have no direct impact on the compiler but are passed through to the backend (LLVM, at present) and enable it to make use of wasm features. They may affected quality of codegen and/or perhaps the ability for some kinds of code to be compiled, this is not entirely clear to me and I would appreciate clarification.
- The names of these features comes from webassembly spec processes and they are all in "stage 4", which means effectively done and also available in browsers without feature gates etc. So no reason to think the names or meaning will change going forward.
The primary concern I can imagine, if the above is correct, is that the compiler doesn't handle the flags correctly or that this may allow some Rust code to reach WASM that "ought not to" (not sure how that latter part would happen though unless there was a bug somewhere else in rustc that enabled it, so i.e. the first problem).
Team member @nikomatsakis has proposed to merge this. The next step is review by the rest of the tagged team members:
- [x] @Aaron1011
- [x] @cjgillot
- [x] @compiler-errors
- [x] @davidtwco
- [x] @eddyb
- [x] @estebank
- [x] @jackh726
- [x] @joshtriplett
- [x] @lcnr
- [x] @matthewjasper
- [x] @michaelwoerister
- [x] @nagisa
- [x] @nikomatsakis
- [x] @oli-obk
- [x] @petrochenkov
- [ ] @pnkfelix
- [ ] @scottmcm
- [x] @tmandry
- [x] @wesleywiser
No concerns currently listed.
Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!
cc @rust-lang/lang-advisors: FCP proposed for lang, please feel free to register concerns. See this document for info about what commands tagged team members can give me.
I assume this would include the ability to specify those features in both compiler flags and #[target_feature], though I can't remember if we stabilized the latter for WASM or not.
Also @nikomatsakis it sounds like the exact names being used actually come from LLVM. I don't see any reason to differ on those though.
In any case this all sounds fine to me, so
@rfcbot reviewed
Sure yeah I can try to document and clarify a few things here. I'll reiterate some bits I mentioned above as well.
For background here the WebAssembly Community Group (CG) is the main technical governing body for WebAssembly at this time. There is a process in place for adding new features to WebAssembly and it is documented in this repository. As proposals go through their stages it requires adding support to toolchains and languages which often means implementing this in LLVM. For Rust that means that there's a question of when to stabilize and how to support new features of WebAssembly.
Proposals which have reached at least stage 4 are generally considered done. At that point browsers start shipping features ungated for example. Historically this at least been my personal loose threshold of when to stabilize features for Rust. Any feature in phase 3 or lower would, in my opinion, not be a candidate for stabilization in Rust.
All of the features stabilized here are phase 4 and beyond (many at phase 5). This means that the threshold for stability in WebAssembly itself is achieved and the question now turns to Rust to how to expose these features. Features in WebAssembly are often new instructions but sometimes manifest as new syntactic forms in a WebAssembly binary. Features also do not work like native platforms because for a WebAssembly binary to be considered valid to execute it must be valid in its entirety. In contrast a native binary can contain code that the current processor doesn't support so long as it doesn't execute it. In that sense native runtime feature detection is not possible in WebAssembly unlike how it is for native platforms.
Ok so how does any of this affect Rust. Rust supports compilation to WebAssembly through LLVM, and in general needs to express the ability to customize the output binary to handle the presence or non-presence of these features. For example for performance-related features users may wish to have builds both with and without the feature. This is achieved right now via a few means:
-
Via
-Ctarget-feature=+foo. AFAIK this isn't gated and is passed through straight to LLVM, so this works today and does not require stabilization. This works well for WebAssembly since if a feature is enabled for one function it may as well be enabled for the whole binary since if one function gets it all others will be able to have access to it as well. -
Via
#[target_feature(enable = "foo")]. This is not stable today and is what would be stabilized here. This is where the story is a little murky for WebAssembly since unlike native platforms not much is gained from enabling a feature per-function rather than at the whole module level. That being said this is required for correctness in the case of simd128 for example (e.g. LLVM can't codegen intrinsics unless that feature is enabled) and can still be useful in some niche situations. -
Testing via
#[cfg(target_feature = "foo")]currently doesn't work today since only when these attributes are stable are the cfg directives defined. This can be useful in general but isn't too useful for many of the features stabilized here.
So given all that, this PR largely boils down to enabling #[cfg(target_feature = "foo")] and #[target_feature(enable = "foo")] on stable. These aren't the
most useful things in the world but can be useful in some niche situations. What
follows is a more detailed description of what all these features are.
"bulk-memory"
The bulk memory
proposal
for WebAssembly can more-or-less be thought of as adding a memcpy instruction
to WebAssembly (or memmove, I forget which allows overlap). There's other bits
and bobs though for "data segments" and constructs in WebAssembly which are not
relevant to Rust-the-language directly. Why users might want this proposal:
- The
memory.copyWebAssembly is much faster thanmemcpy-written-in-wasm for large data copies. - Multithreaded WebAssembly uses features added in this proposal.
"extended-const"
The extended const proposal
enables new forms of constant expressions in WebAssembly. This has no effect on
Rust itself and has nothing to do with Rust const. This is not useful nor
exposed to Rust code at all through LLVM and is only used, as far as I know, for
dynamic linking. The dynamic linking story in Rust for WebAssembly is not
well-defined and has not been fleshed out. Nevertheless though it's stable in
WebAssembly and implemented in LLVM and will be integral for any future
experimentation with dynamic linking for example. This may also be useful for
other more niche situations of users trying to craft particular shapes of wasm
modules.
"mutable-globals"
The mutable global proposal is largely centered around JS integration of WebAssembly. Honestly I'm not really sure why this is exposed through LLVM. This has no effect on generated code as far as I know and is basically only required if you want to experiment with threads. Any threads-using target for WebAssembly is required to enable this proposal (e.g. it's a hard requirement check in the LLD linker).
"nontrapping-fptoint"
The non-trapping float-to-int conversions
proposal
affects how f32 as i32 is translated in Rust for example. A comparison can be
seen on godbolt.org of how the generated code
differs. For any application bottlenecked on performance of this operation this
would be critical in getting the best performance.
"sign-ext"
The sign extension operations proposal added a few instructions related to sign extending 8/16-bit values to 32/64-bit values to the base instruction set. A comparison here can also be seen on godbolt.org. Note that this feature is enabled by default in the WebAssembly targets today so it's actually somewhat difficult to disable.
I assume this would include the ability to specify those features in both compiler flags and #[target_feature]
-C target-feature generally doesn't restrict which options you can use. This is only stabilizing the #[target_feature] attribute values. Previous to this PR, only simd128 was stable in the attribute.
I'm going to rubber stamp this if wasm experts are on board with this stabilization. @rfcbot reviewed
:umbrella: The latest upstream changes (presumably #117915) made this pull request unmergeable. Please resolve the merge conflicts.
:umbrella: The latest upstream changes (presumably #118957) made this pull request unmergeable. Please resolve the merge conflicts.
The job x86_64-gnu-llvm-16 failed! Check out the build log: (web) (plain)
Click to see the possible cause of the failure (guessed by this bot)
GITHUB_ACTION=__run_7
GITHUB_ACTIONS=true
GITHUB_ACTION_REF=
GITHUB_ACTION_REPOSITORY=
GITHUB_ACTOR=daxpedda
GITHUB_API_URL=https://api.github.com
GITHUB_BASE_REF=master
GITHUB_ENV=/home/runner/work/_temp/_runner_file_commands/set_env_bf2dec72-c163-4d92-81f9-5d39bd16f8aa
GITHUB_EVENT_NAME=pull_request
GITHUB_EVENT_NAME=pull_request
GITHUB_EVENT_PATH=/home/runner/work/_temp/_github_workflow/event.json
GITHUB_GRAPHQL_URL=https://api.github.com/graphql
GITHUB_HEAD_REF=wasm-nontrapping-fptoint
GITHUB_JOB=pr
GITHUB_PATH=/home/runner/work/_temp/_runner_file_commands/add_path_bf2dec72-c163-4d92-81f9-5d39bd16f8aa
GITHUB_REF=refs/pull/117457/merge
GITHUB_REF_NAME=117457/merge
GITHUB_REF_PROTECTED=false
---
GITHUB_SERVER_URL=https://github.com
GITHUB_SHA=cc60f8bf58a5ead19c8008d3374c9fdd342b7b0a
GITHUB_STATE=/home/runner/work/_temp/_runner_file_commands/save_state_bf2dec72-c163-4d92-81f9-5d39bd16f8aa
GITHUB_STEP_SUMMARY=/home/runner/work/_temp/_runner_file_commands/step_summary_bf2dec72-c163-4d92-81f9-5d39bd16f8aa
GITHUB_TRIGGERING_ACTOR=daxpedda
GITHUB_WORKFLOW_REF=rust-lang/rust/.github/workflows/ci.yml@refs/pull/117457/merge
GITHUB_WORKFLOW_SHA=cc60f8bf58a5ead19c8008d3374c9fdd342b7b0a
GITHUB_WORKSPACE=/home/runner/work/rust/rust
GOROOT_1_19_X64=/opt/hostedtoolcache/go/1.19.13/x64
---
Built container sha256:9c3c93a371e5aed5c18185b24f130d95d5140dbd72a9b325e7b6b49e521a4faa
Looks like docker image is the same as before, not uploading
https://ci-caches.rust-lang.org/docker/7ebc15c01a233894034d277c8cce4e949f4e7791f66b4727c8fb6e058a0b8171d6152e1441d677cef0653843ceeee469c097b8699b2bb74249e674f6aa1a8813
sha256:9c3c93a371e5aed5c18185b24f130d95d5140dbd72a9b325e7b6b49e521a4faa
Setting extra environment values for docker: --env ENABLE_GCC_CODEGEN=1 --env GCC_EXEC_PREFIX=/usr/lib/gcc/
[CI_JOB_NAME=x86_64-gnu-llvm-16]
##[group]Clock drift check
local time: Fri Dec 15 11:45:35 UTC 2023
network time: Fri, 15 Dec 2023 11:45:35 GMT
network time: Fri, 15 Dec 2023 11:45:35 GMT
##[endgroup]
sccache: Starting the server...
##[group]Configure the build
configure: processing command line
configure:
configure: build.configure-args := ['--build=x86_64-unknown-linux-gnu', '--llvm-root=/usr/lib/llvm-16', '--enable-llvm-link-shared', '--set', 'rust.thin-lto-import-instr-limit=10', '--enable-verbose-configure', '--enable-sccache', '--disable-manage-submodules', '--enable-locked-deps', '--enable-cargo-native-static', '--set', 'rust.codegen-units-std=1', '--set', 'dist.compression-profile=balanced', '--dist-compression-formats=xz', '--disable-dist-src', '--release-channel=nightly', '--enable-debug-assertions', '--enable-overflow-checks', '--enable-llvm-assertions', '--set', 'rust.verify-llvm-ir', '--set', 'rust.codegen-backends=llvm,cranelift,gcc', '--set', 'llvm.static-libstdcpp', '--enable-missing-tools', '--enable-new-symbol-mangling']
configure: target.x86_64-unknown-linux-gnu.llvm-config := /usr/lib/llvm-16/bin/llvm-config
configure: llvm.link-shared := True
configure: rust.thin-lto-import-instr-limit := 10
configure: rust.codegen-units-std := 1
---
157 LL | target_feature = "_UNEXPECTED_VALUE",
158 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
159 |
- = note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512er`, `avx512f`, `avx512ifma`, `avx512pf`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `bf16`, `bmi1`, `bmi2`, `bti`, `bulk-memory`, `c`, `cache`, `cmpxchg16b`, `crc`, `crt-static`, `d`, `d32`, `dit`, `doloop`, `dotprod`, `dpb`, `dpb2`, `dsp`, `dsp1e2`, `dspe60`, `e`, `e1`, `e2`, `edsp`, `elrw`, `ermsb`, `exception-handling`, `f`, `f16c`, `f32mm`, `f64mm`, `fast-unaligned-access`, `fcma`, `fdivdu`, `fhm`, `flagm`, `float1e2`, `float1e3`, `float3e4`, `float7e60`, `floate1`, `fma`, `fp-armv8`, `fp16`, `fp64`, `fpuv2_df`, `fpuv2_sf`, `fpuv3_df`, `fpuv3_hf`, `fpuv3_hi`, `fpuv3_sf`, `frintts`, `fxsr`, `gfni`, `hard-float`, `hard-float-abi`, `hard-tp`, `high-registers`, `hvx`, `hvx-length128b`, `hwdiv`, `i8mm`, `jsconv`, `lasx`, `lbt`, `lor`, `lse`, `lsx`, `lvz`, `lzcnt`, `m`, `mclass`, `movbe`, `mp`, `mp1e2`, `msa`, `mte`, `multivalue`, `mutable-globals`, `neon`, `nontrapping-fptoint`, `nvic`, `paca`, `pacg`, `pan`, `pclmulqdq`, `pmuv3`, `popcnt`, `power10-vector`, `power8-altivec`, `power8-vector`, `power9-altivec`, `power9-vector`, `rand`, `ras`, `rclass`, `rcpc`, `rcpc2`, `rdm`, `rdrand`, `rdseed`, `reference-types`, `relax`, `relaxed-simd`, `rtm`, `sb`, `sha`, `sha2`, `sha3`, `sign-ext`, `simd128`, `sm4`, `spe`, `ssbs`, `sse`, `sse2`, `sse3`, `sse4.1`, `sse4.2`, `sse4a`, `ssse3`, `sve`, `sve2`, `sve2-aes`, `sve2-bitperm`, `sve2-sha3`, `sve2-sm4`, `tbm`, `thumb-mode`, `thumb2`, `tme`, `trust`, `trustzone`, `ual`, `v`, `v5te`, `v6`, `v6k`, `v6t2`, `v7`, `v8`, `v8.1a`, `v8.2a`, `v8.3a`, `v8.4a`, `v8.5a`, `v8.6a`, `v8.7a`, `vaes`, `vdsp2e60f`, `vdspv1`, `vdspv2`, `vfp2`, `vfp3`, `vfp4`, `vh`, `virt`, `virtualization`, `vpclmulqdq`, `vsx`, `xsave`, `xsavec`, `xsaveopt`, `xsaves`, `zba`, `zbb`, `zbc`, `zbkb`, `zbkc`, `zbkx`, `zbs`, `zdinx`, `zfh`, `zfhmin`, `zfinx`, `zhinx`, `zhinxmin`, `zk`, `zkn`, `zknd`, `zkne`, `zknh`, `zkr`, `zks`, `zksed`, `zksh`, `zkt`
+ = note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512er`, `avx512f`, `avx512ifma`, `avx512pf`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `bf16`, `bmi1`, `bmi2`, `bti`, `bulk-memory`, `c`, `cache`, `cmpxchg16b`, `crc`, `crt-static`, `d`, `d32`, `dit`, `doloop`, `dotprod`, `dpb`, `dpb2`, `dsp`, `dsp1e2`, `dspe60`, `e`, `e1`, `e2`, `edsp`, `elrw`, `ermsb`, `exception-handling`, `extended-const`, `f`, `f16c`, `f32mm`, `f64mm`, `fast-unaligned-access`, `fcma`, `fdivdu`, `fhm`, `flagm`, `float1e2`, `float1e3`, `float3e4`, `float7e60`, `floate1`, `fma`, `fp-armv8`, `fp16`, `fp64`, `fpuv2_df`, `fpuv2_sf`, `fpuv3_df`, `fpuv3_hf`, `fpuv3_hi`, `fpuv3_sf`, `frintts`, `fxsr`, `gfni`, `hard-float`, `hard-float-abi`, `hard-tp`, `high-registers`, `hvx`, `hvx-length128b`, `hwdiv`, `i8mm`, `jsconv`, `lasx`, `lbt`, `lor`, `lse`, `lsx`, `lvz`, `lzcnt`, `m`, `mclass`, `movbe`, `mp`, `mp1e2`, `msa`, `mte`, `multivalue`, `mutable-globals`, `neon`, `nontrapping-fptoint`, `nvic`, `paca`, `pacg`, `pan`, `pclmulqdq`, `pmuv3`, `popcnt`, `power10-vector`, `power8-altivec`, `power8-vector`, `power9-altivec`, `power9-vector`, `rand`, `ras`, `rclass`, `rcpc`, `rcpc2`, `rdm`, `rdrand`, `rdseed`, `reference-types`, `relax`, `relaxed-simd`, `rtm`, `sb`, `sha`, `sha2`, `sha3`, `sign-ext`, `simd128`, `sm4`, `spe`, `ssbs`, `sse`, `sse2`, `sse3`, `sse4.1`, `sse4.2`, `sse4a`, `ssse3`, `sve`, `sve2`, `sve2-aes`, `sve2-bitperm`, `sve2-sha3`, `sve2-sm4`, `tbm`, `thumb-mode`, `thumb2`, `tme`, `trust`, `trustzone`, `ual`, `v`, `v5te`, `v6`, `v6k`, `v6t2`, `v7`, `v8`, `v8.1a`, `v8.2a`, `v8.3a`, `v8.4a`, `v8.5a`, `v8.6a`, `v8.7a`, `vaes`, `vdsp2e60f`, `vdspv1`, `vdspv2`, `vfp2`, `vfp3`, `vfp4`, `vh`, `virt`, `virtualization`, `vpclmulqdq`, `vsx`, `xsave`, `xsavec`, `xsaveopt`, `xsaves`, `zba`, `zbb`, `zbc`, `zbkb`, `zbkc`, `zbkx`, `zbs`, `zdinx`, `zfh`, `zfhmin`, `zfinx`, `zhinx`, `zhinxmin`, `zk`, `zkn`, `zknd`, `zkne`, `zknh`, `zkr`, `zks`, `zksed`, `zksh`, `zkt`
161 = help: to expect this configuration use `--check-cfg=cfg(target_feature, values("_UNEXPECTED_VALUE"))`
162 = note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
The actual stderr differed from the expected stderr.
Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/check-cfg/well-known-values/well-known-values.stderr
Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/check-cfg/well-known-values/well-known-values.stderr
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args check-cfg/well-known-values.rs`
error: 1 errors occurred comparing output.
status: exit status: 0
command: RUSTC_ICE="0" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/check-cfg/well-known-values.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/check-cfg/well-known-values" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/check-cfg/well-known-values/auxiliary" "--check-cfg=cfg()" "-Z" "unstable-options"
--- stderr -------------------------------
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:26:5
Build completed unsuccessfully in 0:13:25
Build completed unsuccessfully in 0:13:25
|
LL | debug_assertions = "_UNEXPECTED_VALUE",
| ^^^^^^^^^^^^^^^^----------------------
| |
| help: remove the value
|
= note: no expected value for `debug_assertions`
= help: to expect this configuration use `--check-cfg=cfg(debug_assertions, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:28:5
|
|
LL | doc = "_UNEXPECTED_VALUE",
| ^^^----------------------
| help: remove the value
|
= note: no expected value for `doc`
= note: no expected value for `doc`
= help: to expect this configuration use `--check-cfg=cfg(doc, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:30:5
|
LL | doctest = "_UNEXPECTED_VALUE",
LL | doctest = "_UNEXPECTED_VALUE",
| ^^^^^^^----------------------
| |
| help: remove the value
|
= note: no expected value for `doctest`
= help: to expect this configuration use `--check-cfg=cfg(doctest, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:32:5
|
|
LL | miri = "_UNEXPECTED_VALUE",
| |
| help: remove the value
|
= note: no expected value for `miri`
= note: no expected value for `miri`
= help: to expect this configuration use `--check-cfg=cfg(miri, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:34:5
|
LL | overflow_checks = "_UNEXPECTED_VALUE",
LL | overflow_checks = "_UNEXPECTED_VALUE",
| ^^^^^^^^^^^^^^^----------------------
| |
| help: remove the value
|
= note: no expected value for `overflow_checks`
= help: to expect this configuration use `--check-cfg=cfg(overflow_checks, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:36:5
|
|
LL | panic = "_UNEXPECTED_VALUE",
|
= note: expected values for `panic` are: `abort`, `unwind`
= note: expected values for `panic` are: `abort`, `unwind`
= help: to expect this configuration use `--check-cfg=cfg(panic, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:38:5
|
|
LL | proc_macro = "_UNEXPECTED_VALUE",
| |
| help: remove the value
|
= note: no expected value for `proc_macro`
= note: no expected value for `proc_macro`
= help: to expect this configuration use `--check-cfg=cfg(proc_macro, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:40:5
|
|
LL | relocation_model = "_UNEXPECTED_VALUE",
|
|
= note: expected values for `relocation_model` are: `dynamic-no-pic`, `pic`, `pie`, `ropi`, `ropi-rwpi`, `rwpi`, `static`
= help: to expect this configuration use `--check-cfg=cfg(relocation_model, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:42:5
|
LL | sanitize = "_UNEXPECTED_VALUE",
LL | sanitize = "_UNEXPECTED_VALUE",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: expected values for `sanitize` are: `address`, `cfi`, `hwaddress`, `kcfi`, `kernel-address`, `leak`, `memory`, `memtag`, `safestack`, `shadow-call-stack`, `thread`
= help: to expect this configuration use `--check-cfg=cfg(sanitize, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:44:5
|
|
LL | target_abi = "_UNEXPECTED_VALUE",
|
|
= note: expected values for `target_abi` are: ``, `abi64`, `abiv2`, `abiv2hf`, `eabi`, `eabihf`, `elf`, `fortanix`, `ilp32`, `llvm`, `macabi`, `sim`, `softfloat`, `spe`, `uwp`, `vec-extabi`, `x32`
= help: to expect this configuration use `--check-cfg=cfg(target_abi, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:46:5
|
LL | target_arch = "_UNEXPECTED_VALUE",
LL | target_arch = "_UNEXPECTED_VALUE",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: expected values for `target_arch` are: `aarch64`, `arm`, `avr`, `bpf`, `csky`, `hexagon`, `loongarch64`, `m68k`, `mips`, `mips32r6`, `mips64`, `mips64r6`, `msp430`, `nvptx64`, `powerpc`, `powerpc64`, `riscv32`, `riscv64`, `s390x`, `sparc`, `sparc64`, `wasm32`, `wasm64`, `x86`, `x86_64`
= help: to expect this configuration use `--check-cfg=cfg(target_arch, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:48:5
|
LL | target_endian = "_UNEXPECTED_VALUE",
LL | target_endian = "_UNEXPECTED_VALUE",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: expected values for `target_endian` are: `big`, `little`
= help: to expect this configuration use `--check-cfg=cfg(target_endian, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:50:5
|
|
LL | target_env = "_UNEXPECTED_VALUE",
|
|
= note: expected values for `target_env` are: ``, `eabihf`, `gnu`, `gnueabihf`, `msvc`, `musl`, `newlib`, `nto70`, `nto71`, `ohos`, `psx`, `relibc`, `sgx`, `uclibc`
= help: to expect this configuration use `--check-cfg=cfg(target_env, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:52:5
|
LL | target_family = "_UNEXPECTED_VALUE",
LL | target_family = "_UNEXPECTED_VALUE",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: expected values for `target_family` are: `unix`, `wasm`, `windows`
= help: to expect this configuration use `--check-cfg=cfg(target_family, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:54:5
|
LL | target_feature = "_UNEXPECTED_VALUE",
LL | target_feature = "_UNEXPECTED_VALUE",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512er`, `avx512f`, `avx512ifma`, `avx512pf`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `bf16`, `bmi1`, `bmi2`, `bti`, `bulk-memory`, `c`, `cache`, `cmpxchg16b`, `crc`, `crt-static`, `d`, `d32`, `dit`, `doloop`, `dotprod`, `dpb`, `dpb2`, `dsp`, `dsp1e2`, `dspe60`, `e`, `e1`, `e2`, `edsp`, `elrw`, `ermsb`, `exception-handling`, `extended-const`, `f`, `f16c`, `f32mm`, `f64mm`, `fast-unaligned-access`, `fcma`, `fdivdu`, `fhm`, `flagm`, `float1e2`, `float1e3`, `float3e4`, `float7e60`, `floate1`, `fma`, `fp-armv8`, `fp16`, `fp64`, `fpuv2_df`, `fpuv2_sf`, `fpuv3_df`, `fpuv3_hf`, `fpuv3_hi`, `fpuv3_sf`, `frintts`, `fxsr`, `gfni`, `hard-float`, `hard-float-abi`, `hard-tp`, `high-registers`, `hvx`, `hvx-length128b`, `hwdiv`, `i8mm`, `jsconv`, `lasx`, `lbt`, `lor`, `lse`, `lsx`, `lvz`, `lzcnt`, `m`, `mclass`, `movbe`, `mp`, `mp1e2`, `msa`, `mte`, `multivalue`, `mutable-globals`, `neon`, `nontrapping-fptoint`, `nvic`, `paca`, `pacg`, `pan`, `pclmulqdq`, `pmuv3`, `popcnt`, `power10-vector`, `power8-altivec`, `power8-vector`, `power9-altivec`, `power9-vector`, `rand`, `ras`, `rclass`, `rcpc`, `rcpc2`, `rdm`, `rdrand`, `rdseed`, `reference-types`, `relax`, `relaxed-simd`, `rtm`, `sb`, `sha`, `sha2`, `sha3`, `sign-ext`, `simd128`, `sm4`, `spe`, `ssbs`, `sse`, `sse2`, `sse3`, `sse4.1`, `sse4.2`, `sse4a`, `ssse3`, `sve`, `sve2`, `sve2-aes`, `sve2-bitperm`, `sve2-sha3`, `sve2-sm4`, `tbm`, `thumb-mode`, `thumb2`, `tme`, `trust`, `trustzone`, `ual`, `v`, `v5te`, `v6`, `v6k`, `v6t2`, `v7`, `v8`, `v8.1a`, `v8.2a`, `v8.3a`, `v8.4a`, `v8.5a`, `v8.6a`, `v8.7a`, `vaes`, `vdsp2e60f`, `vdspv1`, `vdspv2`, `vfp2`, `vfp3`, `vfp4`, `vh`, `virt`, `virtualization`, `vpclmulqdq`, `vsx`, `xsave`, `xsavec`, `xsaveopt`, `xsaves`, `zba`, `zbb`, `zbc`, `zbkb`, `zbkc`, `zbkx`, `zbs`, `zdinx`, `zfh`, `zfhmin`, `zfinx`, `zhinx`, `zhinxmin`, `zk`, `zkn`, `zknd`, `zkne`, `zknh`, `zkr`, `zks`, `zksed`, `zksh`, `zkt`
= help: to expect this configuration use `--check-cfg=cfg(target_feature, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:56:5
|
|
LL | target_has_atomic = "_UNEXPECTED_VALUE",
|
|
= note: expected values for `target_has_atomic` are: (none), `128`, `16`, `32`, `64`, `8`, `ptr`
= help: to expect this configuration use `--check-cfg=cfg(target_has_atomic, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:58:5
|
|
LL | target_has_atomic_equal_alignment = "_UNEXPECTED_VALUE",
|
|
= note: expected values for `target_has_atomic_equal_alignment` are: (none), `128`, `16`, `32`, `64`, `8`, `ptr`
= help: to expect this configuration use `--check-cfg=cfg(target_has_atomic_equal_alignment, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:60:5
|
LL | target_has_atomic_load_store = "_UNEXPECTED_VALUE",
LL | target_has_atomic_load_store = "_UNEXPECTED_VALUE",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: expected values for `target_has_atomic_load_store` are: (none), `128`, `16`, `32`, `64`, `8`, `ptr`
= help: to expect this configuration use `--check-cfg=cfg(target_has_atomic_load_store, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:62:5
|
LL | target_os = "_UNEXPECTED_VALUE",
LL | target_os = "_UNEXPECTED_VALUE",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `openbsd`, `psp`, `redox`, `solaris`, `solid_asp3`, `teeos`, `tvos`, `uefi`, `unknown`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`
= help: to expect this configuration use `--check-cfg=cfg(target_os, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:64:5
|
LL | target_pointer_width = "_UNEXPECTED_VALUE",
LL | target_pointer_width = "_UNEXPECTED_VALUE",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: expected values for `target_pointer_width` are: `16`, `32`, `64`
= help: to expect this configuration use `--check-cfg=cfg(target_pointer_width, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:66:5
|
LL | target_thread_local = "_UNEXPECTED_VALUE",
LL | target_thread_local = "_UNEXPECTED_VALUE",
| ^^^^^^^^^^^^^^^^^^^----------------------
| |
| help: remove the value
|
= note: no expected value for `target_thread_local`
= help: to expect this configuration use `--check-cfg=cfg(target_thread_local, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:68:5
|
|
LL | target_vendor = "_UNEXPECTED_VALUE",
|
|
= note: expected values for `target_vendor` are: `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `nintendo`, `nvidia`, `pc`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, `wrs`
= help: to expect this configuration use `--check-cfg=cfg(target_vendor, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:70:5
|
LL | test = "_UNEXPECTED_VALUE",
LL | test = "_UNEXPECTED_VALUE",
| ^^^^----------------------
| |
| help: remove the value
|
= note: no expected value for `test`
= help: to expect this configuration use `--check-cfg=cfg(test, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:72:5
|
|
LL | unix = "_UNEXPECTED_VALUE",
| |
| help: remove the value
|
= note: no expected value for `unix`
= note: no expected value for `unix`
= help: to expect this configuration use `--check-cfg=cfg(unix, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:74:5
|
|
LL | windows = "_UNEXPECTED_VALUE",
| |
| help: remove the value
|
= note: no expected value for `windows`
= note: no expected value for `windows`
= help: to expect this configuration use `--check-cfg=cfg(windows, values("_UNEXPECTED_VALUE"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `linuz`
##[warning] --> /checkout/tests/ui/check-cfg/well-known-values.rs:80:7
|
|
LL | #[cfg(target_os = "linuz")] // testing that we suggest `linux`
| |
| |
| help: there is a expected value with a similar name: `"linux"`
|
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `openbsd`, `psp`, `redox`, `solaris`, `solid_asp3`, `teeos`, `tvos`, `uefi`, `unknown`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`
= help: to expect this configuration use `--check-cfg=cfg(target_os, values("linuz"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: 26 warnings emitted
------------------------------------------
:umbrella: The latest upstream changes (presumably #118924) made this pull request unmergeable. Please resolve the merge conflicts.
Is this blocked by anything? The warnings reached stable by recently, so you get all sorts of unnecessary warnings when using any non MVP Wasm features now. I'd also like to see the sibling PR https://github.com/rust-lang/rust/pull/117468 merged which similarly stalled, cause those intrinsics could be really useful for some libraries that I'd like to do a PR for.
Is this blocked by anything?
Nothing technical is blocking it.
I'm not very familiar with the process, but it seems to require a review according to the assigned labels? According to https://github.com/rust-lang/rust/pull/117457#issuecomment-1789204219 it also seems like at least four more approvals are necessary.
:umbrella: The latest upstream changes (presumably #120620) made this pull request unmergeable. Please resolve the merge conflicts.
:umbrella: The latest upstream changes (presumably #120991) made this pull request unmergeable. Please resolve the merge conflicts.
:umbrella: The latest upstream changes (presumably #122113) made this pull request unmergeable. Please resolve the merge conflicts.
The job x86_64-gnu-llvm-16 failed! Check out the build log: (web) (plain)
Click to see the possible cause of the failure (guessed by this bot)
GITHUB_ACTION=__run_7
GITHUB_ACTIONS=true
GITHUB_ACTION_REF=
GITHUB_ACTION_REPOSITORY=
GITHUB_ACTOR=daxpedda
GITHUB_API_URL=https://api.github.com
GITHUB_BASE_REF=master
GITHUB_ENV=/home/runner/work/_temp/_runner_file_commands/set_env_57e78c39-289b-422b-a8a4-5dc660acb672
GITHUB_EVENT_NAME=pull_request
GITHUB_EVENT_NAME=pull_request
GITHUB_EVENT_PATH=/home/runner/work/_temp/_github_workflow/event.json
GITHUB_GRAPHQL_URL=https://api.github.com/graphql
GITHUB_HEAD_REF=wasm-nontrapping-fptoint
GITHUB_JOB=pr
GITHUB_PATH=/home/runner/work/_temp/_runner_file_commands/add_path_57e78c39-289b-422b-a8a4-5dc660acb672
GITHUB_REF=refs/pull/117457/merge
GITHUB_REF_NAME=117457/merge
GITHUB_REF_PROTECTED=false
---
GITHUB_SERVER_URL=https://github.com
GITHUB_SHA=d9ea37853feb26179edc666232a36533045cd003
GITHUB_STATE=/home/runner/work/_temp/_runner_file_commands/save_state_57e78c39-289b-422b-a8a4-5dc660acb672
GITHUB_STEP_SUMMARY=/home/runner/work/_temp/_runner_file_commands/step_summary_57e78c39-289b-422b-a8a4-5dc660acb672
GITHUB_TRIGGERING_ACTOR=daxpedda
GITHUB_WORKFLOW_REF=rust-lang/rust/.github/workflows/ci.yml@refs/pull/117457/merge
GITHUB_WORKFLOW_SHA=d9ea37853feb26179edc666232a36533045cd003
GITHUB_WORKSPACE=/home/runner/work/rust/rust
GOROOT_1_20_X64=/opt/hostedtoolcache/go/1.20.14/x64
---
#12 writing image sha256:499991451102320dc72669ffde9334ef36d2dda2565a51fe6f93a8f45ebf7abd done
#12 naming to docker.io/library/rust-ci done
#12 DONE 10.1s
##[endgroup]
Setting extra environment values for docker: --env ENABLE_GCC_CODEGEN=1 --env GCC_EXEC_PREFIX=/usr/lib/gcc/
[CI_JOB_NAME=x86_64-gnu-llvm-16]
##[group]Clock drift check
local time: Thu Mar 7 09:35:00 UTC 2024
network time: Thu, 07 Mar 2024 09:35:01 GMT
network time: Thu, 07 Mar 2024 09:35:01 GMT
##[endgroup]
sccache: Starting the server...
##[group]Configure the build
configure: processing command line
configure:
configure: build.configure-args := ['--build=x86_64-unknown-linux-gnu', '--llvm-root=/usr/lib/llvm-16', '--enable-llvm-link-shared', '--set', 'rust.thin-lto-import-instr-limit=10', '--set', 'change-id=99999999', '--enable-verbose-configure', '--enable-sccache', '--disable-manage-submodules', '--enable-locked-deps', '--enable-cargo-native-static', '--set', 'rust.codegen-units-std=1', '--set', 'dist.compression-profile=balanced', '--dist-compression-formats=xz', '--set', 'build.optimized-compiler-builtins', '--disable-dist-src', '--release-channel=nightly', '--enable-debug-assertions', '--enable-overflow-checks', '--enable-llvm-assertions', '--set', 'rust.verify-llvm-ir', '--set', 'rust.codegen-backends=llvm,cranelift,gcc', '--set', 'llvm.static-libstdcpp', '--enable-new-symbol-mangling']
configure: target.x86_64-unknown-linux-gnu.llvm-config := /usr/lib/llvm-16/bin/llvm-config
configure: llvm.link-shared := True
configure: rust.thin-lto-import-instr-limit := 10
configure: change-id := 99999999
---
---- [ui] tests/ui/check-cfg/mix.rs stdout ----
diff of stderr:
251 LL | cfg!(target_feature = "zebra");
253 |
253 |
- = note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512er`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512pf`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `bf16`, `bmi1`, `bmi2` and 187 more
+ = note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512er`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512pf`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `bf16`, `bmi1`, `bmi2` and 188 more
255 = note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
257 warning: 27 warnings emitted
The actual stderr differed from the expected stderr.
The actual stderr differed from the expected stderr.
Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/check-cfg/mix/mix.stderr
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args check-cfg/mix.rs`
error: 1 errors occurred comparing output.
status: exit status: 0
command: RUSTC_ICE="0" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/check-cfg/mix.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/check-cfg/mix" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/check-cfg/mix/auxiliary" "--cfg" "feature=\"bar\"" "--cfg" "unknown_name" "-Z" "unstable-options" "--check-cfg=cfg(feature,values(\"foo\"))"
--- stderr -------------------------------
warning: unexpected `cfg` condition name: `widnows`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:12:7
|
|
LL | #[cfg(widnows)]
| ^^^^^^^ help: there is a config with a similar name: `windows`
|
= help: to expect this configuration use `--check-cfg=cfg(widnows)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: (none)
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:16:7
|
|
LL | #[cfg(feature)]
| ^^^^^^^- help: specify a config value: `= "foo"`
= note: expected values for `feature` are: `foo`
= note: expected values for `feature` are: `foo`
= help: to expect this configuration use `--check-cfg=cfg(feature)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `bar`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:23:7
|
LL | #[cfg(feature = "bar")]
LL | #[cfg(feature = "bar")]
| ^^^^^^^^^^^^^^^
|
= note: expected values for `feature` are: `foo`
= help: to expect this configuration use `--check-cfg=cfg(feature, values("bar"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `zebra`
|
|
LL | #[cfg(feature = "zebra")]
|
= note: expected values for `feature` are: `foo`
= note: expected values for `feature` are: `foo`
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `uu`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:31:12
|
|
LL | #[cfg_attr(uu, test)]
|
|
= help: expected names are: `clippy`, `debug_assertions`, `doc`, `doctest`, `feature`, `miri`, `overflow_checks`, `panic`, `proc_macro`, `relocation_model`, `sanitize`, `sanitizer_cfi_generalize_pointers`, `sanitizer_cfi_normalize_integers`, `target_abi`, `target_arch`, `target_endian`, `target_env`, `target_family`, `target_feature`, `target_has_atomic`, `target_has_atomic_equal_alignment`, `target_has_atomic_load_store`, `target_os`, `target_pointer_width`, `target_thread_local`, `target_vendor`, `test`, `unix`, `windows`
= help: to expect this configuration use `--check-cfg=cfg(uu)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `widnows`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:40:10
|
|
LL | cfg!(widnows);
| ^^^^^^^ help: there is a config with a similar name: `windows`
|
= help: to expect this configuration use `--check-cfg=cfg(widnows)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `bar`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:43:10
|
|
LL | cfg!(feature = "bar");
|
= note: expected values for `feature` are: `foo`
= note: expected values for `feature` are: `foo`
= help: to expect this configuration use `--check-cfg=cfg(feature, values("bar"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `zebra`
|
|
LL | cfg!(feature = "zebra");
|
= note: expected values for `feature` are: `foo`
= note: expected values for `feature` are: `foo`
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `xxx`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:47:10
|
|
LL | cfg!(xxx = "foo");
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx, values("foo"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `xxx`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:49:10
|
|
LL | cfg!(xxx);
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `xxx`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:51:14
|
|
LL | cfg!(any(xxx, windows));
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `bad`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:53:14
|
|
LL | cfg!(any(feature = "bad", windows));
|
= note: expected values for `feature` are: `foo`
= note: expected values for `feature` are: `foo`
= help: to expect this configuration use `--check-cfg=cfg(feature, values("bad"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `xxx`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:55:23
|
|
LL | cfg!(any(windows, xxx));
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `xxx`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:57:20
|
|
LL | cfg!(all(unix, xxx));
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `aa`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:59:14
|
|
LL | cfg!(all(aa, bb));
|
|
= help: to expect this configuration use `--check-cfg=cfg(aa)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `bb`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:59:18
|
|
LL | cfg!(all(aa, bb));
|
|
= help: to expect this configuration use `--check-cfg=cfg(bb)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `aa`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:62:14
|
|
LL | cfg!(any(aa, bb));
|
|
= help: to expect this configuration use `--check-cfg=cfg(aa)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `bb`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:62:18
|
|
LL | cfg!(any(aa, bb));
|
|
= help: to expect this configuration use `--check-cfg=cfg(bb)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `zebra`
|
|
LL | cfg!(any(unix, feature = "zebra"));
|
= note: expected values for `feature` are: `foo`
= note: expected values for `feature` are: `foo`
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `xxx`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:67:14
|
|
LL | cfg!(any(xxx, feature = "zebra"));
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `zebra`
|
|
LL | cfg!(any(xxx, feature = "zebra"));
|
= note: expected values for `feature` are: `foo`
= note: expected values for `feature` are: `foo`
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `xxx`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:70:14
|
|
LL | cfg!(any(xxx, unix, xxx));
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition name: `xxx`
##[warning] --> /checkout/tests/ui/check-cfg/mix.rs:70:25
|
|
LL | cfg!(any(xxx, unix, xxx));
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `zebra`
|
|
LL | cfg!(all(feature = "zebra", feature = "zebra", feature = "zebra"));
|
= note: expected values for `feature` are: `foo`
= note: expected values for `feature` are: `foo`
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `zebra`
|
|
LL | cfg!(all(feature = "zebra", feature = "zebra", feature = "zebra"));
|
= note: expected values for `feature` are: `foo`
= note: expected values for `feature` are: `foo`
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `zebra`
|
|
LL | cfg!(all(feature = "zebra", feature = "zebra", feature = "zebra"));
|
= note: expected values for `feature` are: `foo`
= note: expected values for `feature` are: `foo`
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: unexpected `cfg` condition value: `zebra`
|
|
LL | cfg!(target_feature = "zebra");
|
|
= note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512er`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512pf`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `bf16`, `bmi1`, `bmi2` and 188 more
= note: see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration
warning: 27 warnings emitted
------------------------------------------
@alexcrichton
"extended-const"...This is not useful nor exposed to Rust code at all through LLVM and is only used, as far as I know, for dynamic linking.
"mutable-globals"The mutable global proposal is largely centered around JS integration of WebAssembly. Honestly I'm not really sure why this is exposed through LLVM. This has no effect on generated code as far as I know and is basically only required if you want to experiment with threads.
Just to clarify, but while you say these aren't really exposed to Rust code, they do alter codegen and could result in lowering existing Rust programs to wasm modules that would be rejected on-load by an "MVP" wasm interpreter, correct?
Just to clarify, but while you say these aren't really exposed to Rust code, they do alter codegen and could result in lowering existing Rust programs to wasm modules that would be rejected on-load by an "MVP" wasm interpreter, correct?
This is correct.
Notably mutable-globals is already enabled by default since Rust v1.70 because of LLVM v16, even though its unstable in Rust (see the target definition).
I'd agree with @daxpedda, and to add a bit I'll mention that I don't at least personally know much about how to actually get LLVM to trigger different codegen. I think that to some degree LLVM is trying to follow the wasm proposals themselves and have flags for even the more minor ones. I don't see an issue doing the same with rustc, personally.
Put another way, I don't know how to generate a module that requires either mutable-globals or extended-const. I know that LLVM considers mutable-globals a requirements of the atomics feature so it's sort of there for at least that, but I don't know if it actually affects codegen other than serving as a gate of "I'm going to codegen this a single way and you must opt-in to the feature".
For extended-const I believe it's related to dynamic libraries on wasm and optimizing them but I do not personally have enough experience to be able to show the incantation to generate a module with extended-const expressions.
Neither of these features are related to code in funcs, they're instead about the structure of the surrounding module. A native-platform lookalike might be opting into a new kind of relocation or more efficient debuginfo format, for example.
:bell: This is now entering its final comment period, as per the review above. :bell:
The final comment period, with a disposition to merge, as per the review above, is now complete.
As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed.
This will be merged soon.
@bors r+
:pushpin: Commit 1d46f00d837ffbbfc52f6258d77d2d90aaa58074 has been approved by wesleywiser
It is now in the queue for this repository.