about summary refs log tree commit diff
path: root/compiler/rustc_target/src
AgeCommit message (Collapse)AuthorLines
2024-10-25Revert "Emit error when calling/declaring functions with unavailable vectors."Rémy Rakic-17/+0
This reverts commit 5af56cac38fa48e4228e5e123d060e85eb1acbf7.
2024-10-25Auto merge of #127731 - veluca93:abi_checks, r=RalfJungbors-0/+17
Emit future-incompatibility lint when calling/declaring functions with vectors that require missing target feature On some architectures, vector types may have a different ABI depending on whether the relevant target features are enabled. (The ABI when the feature is disabled is often not specified, but LLVM implements some de-facto ABI.) As discussed in https://github.com/rust-lang/lang-team/issues/235, this turns out to very easily lead to unsound code. This commit makes it a post-monomorphization error to declare or call functions using those vector types in a context in which the corresponding target features are disabled, if using an ABI for which the difference is relevant. This ensures that these functions are always called with a consistent ABI. See the [nomination comment](https://github.com/rust-lang/rust/pull/127731#issuecomment-2288558187) for more discussion. r? RalfJung Part of https://github.com/rust-lang/rust/issues/116558
2024-10-25Enable LSX feature for LoongArch Linux targetsWANG Rui-2/+2
2024-10-25Emit error when calling/declaring functions with unavailable vectors.Luca Versari-0/+17
On some architectures, vector types may have a different ABI when relevant target features are enabled. As discussed in https://github.com/rust-lang/lang-team/issues/235, this turns out to very easily lead to unsound code. This commit makes it an error to declare or call functions using those vector types in a context in which the corresponding target features are disabled, if using an ABI for which the difference is relevant.
2024-10-24Rollup merge of #131169 - madsmtm:target-info-nto-vendor, r=wesleywiserStuart Cook-0/+2
Fix `target_vendor` in QNX Neutrino targets The `x86_64-pc-nto-qnx710` and `i586-pc-nto-qnx700` targets have `pc` in their target triple names, but the vendor was set to the default `"unknown"`. CC target maintainers `@flba-eb,` `@gh-tr,` `@jonathanpallant` and `@japaric`
2024-10-23Auto merge of #132079 - fmease:rollup-agrd358, r=fmeasebors-3/+208
Rollup of 9 pull requests Successful merges: - #130991 (Vectorized SliceContains) - #131928 (rustdoc: Document `markdown` module.) - #131955 (Set `signext` or `zeroext` for integer arguments on RISC-V and LoongArch64) - #131979 (Minor tweaks to `compare_impl_item.rs`) - #132036 (Add a test case for #131164) - #132039 (Specialize `read_exact` and `read_buf_exact` for `VecDeque`) - #132060 ("innermost", "outermost", "leftmost", and "rightmost" don't need hyphens) - #132065 (Clarify documentation of `ptr::dangling()` function) - #132066 (Fix a typo in documentation of `pointer::sub_ptr()`) r? `@ghost` `@rustbot` modify labels: rollup
2024-10-22Fix rustc_target test: wasmNN-none should support dynamic linkingGraydon Hoare-1/+7
2024-10-22Address review comments on wasm32v1-none targetGraydon Hoare-52/+15
2024-10-22Add wasm32v1-none target (compiler-team/#791)Graydon Hoare-0/+89
2024-10-23Set `signext` or `zeroext` for integer arguments on LoongArch64Asuna-0/+29
2024-10-23Set `signext` or `zeroext` for integer arguments on RISC-VAsuna-0/+28
2024-10-23Introduce `adjust_for_rust_abi` in `rustc_target`Asuna-3/+151
2024-10-22Auto merge of #131321 - RalfJung:feature-activation, r=nnethercotebors-1/+1
terminology: #[feature] *enables* a feature (instead of "declaring" or "activating" it) Mostly, we currently call a feature that has a corresponding `#[feature(name)]` attribute in the current crate a "declared" feature. I think that is confusing as it does not align with what "declaring" usually means. Furthermore, we *also* refer to `#[stable]`/`#[unstable]` as *declaring* a feature (e.g. in [these diagnostics](https://github.com/rust-lang/rust/blob/f25e5abea229a6b6aa77b45e21cb784e785c6040/compiler/rustc_passes/messages.ftl#L297-L301)), which aligns better with what "declaring" usually means. To make things worse, the functions `tcx.features().active(...)` and `tcx.features().declared(...)` both exist and they are doing almost the same thing (testing whether a corresponding `#[feature(name)]` exists) except that `active` would ICE if the feature is not an unstable lang feature. On top of this, the callback when a feature is activated/declared is called `set_enabled`, and many comments also talk about "enabling" a feature. So really, our terminology is just a mess. I would suggest we use "declaring a feature" for saying that something is/was guarded by a feature (e.g. `#[stable]`/`#[unstable]`), and "enabling a feature" for `#[feature(name)]`. This PR implements that.
2024-10-22terminology: #[feature] *enables* a feature (instead of "declaring" or ↵Ralf Jung-1/+1
"activating" it)
2024-10-22Auto merge of #132020 - workingjubilee:rollup-a8iehqg, r=workingjubileebors-49/+113
Rollup of 6 pull requests Successful merges: - #130432 (rust_for_linux: -Zregparm=<N> commandline flag for X86 (#116972)) - #131697 (`rt::Argument`: elide lifetimes) - #131807 (Always specify `llvm_abiname` for RISC-V targets) - #131954 (shave 150ms off bootstrap) - #132015 (Move const trait tests from `ui/rfcs/rfc-2632-const-trait-impl` to `ui/traits/const-traits`) - #132017 (Update triagebot.toml) r? `@ghost` `@rustbot` modify labels: rollup
2024-10-21Rollup merge of #131807 - beetrees:riscv-target-abi, r=workingjubileeJubilee-0/+24
Always specify `llvm_abiname` for RISC-V targets For RISC-V targets, when `llvm_abiname` is not specified LLVM will infer the ABI from the target features, causing #116344 to occur. This PR adds the correct `llvm_abiname` to all RISC-V targets where it is missing (which are all soft-float targets), and adds a test to prevent future RISC-V targets from accidentally omitting `llvm_abiname`. The only affect of this PR is that `-Ctarget-feature=+f` (or similar) will no longer affect the ABI on the modified targets. <!-- homu-ignore:start --> r? `@RalfJung` <!--- homu-ignore:end -->
2024-10-21Rollup merge of #130432 - azhogin:azhogin/regparm, r=workingjubilee,pnkfelixJubilee-49/+89
rust_for_linux: -Zregparm=<N> commandline flag for X86 (#116972) Command line flag `-Zregparm=<N>` for X86 (32-bit) for rust-for-linux: https://github.com/rust-lang/rust/issues/116972 Implemented in the similar way as fastcall/vectorcall support (args are marked InReg if fit).
2024-10-20make unsupported_calling_conventions a hard errorRalf Jung-6/+5
2024-10-20Rollup merge of #131876 - workingjubilee:llvm-c-c-c-comdat, r=ZalatharStuart Cook-0/+7
compiler: Use LLVM's Comdat support Acting on these long-ago issues: - https://github.com/rust-lang/rust/issues/46437 - https://github.com/rust-lang/rust/issues/68955
2024-10-19cg_llvm: Reuse LLVM-C Comdat supportJubilee Young-0/+7
Migrate `llvm::set_comdat` and `llvm::SetUniqueComdat` to LLVM-C FFI. Note, now we can call `llvm::set_comdat` only when the target actually supports adding comdat. As this has no convenient LLVM-C API, we implement this as `TargetOptions::supports_comdat`. Co-authored-by: Stuart Cook <Zalathar@users.noreply.github.com>
2024-10-18compiler: Revert -Zregparm handling for extern RustJubilee Young-22/+0
2024-10-18Default to the medium code model on OpenHarmony LoongArch targetWANG Rui-1/+2
The context for this is #130266: setting the medium code model for the 'loongarch64-linux-ohos' target.
2024-10-18rust_for_linux: -Zregparm=<N> commandline flag for X86 (#116972)Andrew Zhogin-49/+111
2024-10-17Enable XRay instrumentation for LoongArch Linux targetsWANG Rui-0/+3
2024-10-17Rollup merge of #131583 - heiher:loong-issue-118053, r=jieyouxuMatthias Krüger-0/+2
Setting up indirect access to external data for loongarch64-linux-{musl,ohos} In issue #118053, the `loongarch64-unknown-linux-gnu` target needs indirection to access external data, and so do the `loongarch64-unknown-linux-musl` and `loongarch64-unknown-linux-ohos` targets.
2024-10-17Always specify `llvm_abiname` for RISC-V targetsbeetrees-0/+24
2024-10-16rustc_target: Add pauth-lr aarch64 target featureKajetan Puchalski-0/+2
Add the pauth-lr target feature, corresponding to aarch64 FEAT_PAuth_LR. This feature has been added in LLVM 19. It is currently not supported by the Linux hwcap and so we cannot add runtime feature detection for it at this time.
2024-10-16llvm: Match aarch64 data layout to new LLVM layoutMatthew Maurer-38/+62
LLVM has added 3 new address spaces to support special Windows use cases. These shouldn't trouble us for now, but LLVM requires matching data layouts. See llvm/llvm-project#111879 for details
2024-10-14Rollup merge of #131667 - taiki-e:aarch64-inline-asm-reg-emit, r=AmanieuMatthias Krüger-3/+57
Fix AArch64InlineAsmReg::emit Currently, this method uses `self as u32 - Self::x0 as u32` to get register index: https://github.com/rust-lang/rust/blob/36780360b62320a61e2234b17ec600e8e4785509/compiler/rustc_target/src/asm/aarch64.rs#L204 However, this is incorrect for reasons explained in the following comment: https://github.com/rust-lang/rust/blob/36780360b62320a61e2234b17ec600e8e4785509/compiler/rustc_codegen_llvm/src/asm.rs#L544-L549 r? ``@Amanieu`` ``@rustbot`` label O-AArch64 +A-inline-assembly
2024-10-14Rollup merge of #131332 - taiki-e:arm64ec-clobber-abi, r=AmanieuMatthias Krüger-20/+34
Fix clobber_abi and disallow SVE-related registers in Arm64EC inline assembly Currently `clobber_abi` in Arm64EC inline assembly is implemented using `InlineAsmClobberAbi::AArch64NoX18`, but broken since it attempts to clobber registers that cannot be used in Arm64EC: https://godbolt.org/z/r3PTrGz5r ``` error: cannot use register `x13`: x13, x14, x23, x24, x28, v16-v31 cannot be used for Arm64EC --> <source>:6:14 | 6 | asm!("", clobber_abi("C"), options(nostack, nomem, preserves_flags)); | ^^^^^^^^^^^^^^^^ error: cannot use register `x14`: x13, x14, x23, x24, x28, v16-v31 cannot be used for Arm64EC --> <source>:6:14 | 6 | asm!("", clobber_abi("C"), options(nostack, nomem, preserves_flags)); | ^^^^^^^^^^^^^^^^ <omitted the same errors for v16-v31> ``` Additionally, this disallows SVE-related registers per https://github.com/rust-lang/rust/pull/131332#issuecomment-2401189142. cc ``@dpaoliello`` r? ``@Amanieu`` ``@rustbot`` label O-windows O-AArch64 +A-inline-assembly
2024-10-14Rollup merge of #131473 - workingjubilee:move-that-abi-up, r=saethlinMatthias Krüger-525/+18
compiler: `{TyAnd,}Layout` comes home The `Layout` and `TyAndLayout` types are heavily abstract and have no particular target-specific qualities, though we do use them to answer questions particular to targets. We can keep it that way if we simply move them out of `rustc_target` and into `rustc_abi`. They bring a small entourage of connected types with them, but that's fine. This will allow us to strengthen a few abstraction barriers over time and thus make the notoriously gnarly layout code easier to refactor. For now, we don't need to worry about that and deliberately use reexports to minimize this particular diff.
2024-10-14Fix AArch64InlineAsmReg::emitTaiki Endo-3/+57
2024-10-14Fix clobber_abi and disallow SVE-related registers in Arm64EC inline assemblyTaiki Endo-20/+34
2024-10-13Setting up indirect access to external data for loongarch64-linux-{musl,ohos}WANG Rui-0/+2
In issue #118053, the `loongarch64-unknown-linux-gnu` target needs indirection to access external data, and so do the `loongarch64-unknown-linux-musl` and `loongarch64-unknown-linux-ohos` targets.
2024-10-12Rollup merge of #131334 - heiher:loong-sanitizers, r=Mark-SimulacrumTrevor Gross-3/+18
Enable sanitizers for loongarch64-unknown-* Enable sanitizers for `loongarch64-unknown-linux-{gnu,musl,ohos}` targets.
2024-10-11Rollup merge of #131310 - taiki-e:msp430-clobber-abi, r=AmanieuTrevor Gross-0/+10
Support clobber_abi in MSP430 inline assembly This supports `clobber_abi` which is one of the requirements of stabilization mentioned in #93335. Refs: Section 3.2 "Register Conventions" in [MSP430 Embedded Application Binary Interface](https://www.ti.com/lit/an/slaa534a/slaa534a.pdf) cc ``@cr1901`` r? ``@Amanieu`` ``@rustbot`` label +O-msp430
2024-10-11compiler: Wire `{TyAnd,}Layout` into `rustc_abi`Jubilee Young-248/+12
This finally unites TyAndLayout, Layout, and LayoutS into the same crate, as one might imagine they would be placed. No functional changes.
2024-10-11compiler: Empty out rustc_target::abiJubilee Young-269/+0
2024-10-11compiler: Move impl of ToJson for abi::EndianJubilee Young-8/+6
2024-10-11Rollup merge of #131208 - mustartt:aix-call-abi, r=davidtwcoMatthias Krüger-3/+13
ABI: Pass aggregates by value on AIX On AIX we pass aggregates byval. Adds new ABI for AIX for powerpc64. https://github.com/llvm/llvm-project/blob/313ad85dfa40a18f2edefd7ce2edc0528d5a554a/clang/lib/CodeGen/Targets/PPC.cpp#L216 Fixes the following 2 testcases on AIX: ``` tests/ui/abi/extern/extern-pass-TwoU16s.rs tests/ui/abi/extern/extern-pass-TwoU8s.rs ```
2024-10-10rustc_target: Add sme-b16b16 as an explicit aarch64 target featureKajetan Puchalski-1/+3
LLVM 20 split out what used to be called b16b16 and correspond to aarch64 FEAT_SVE_B16B16 into sve-b16b16 and sme-b16b16. Add sme-b16b16 as an explicit feature and update the codegen accordingly.
2024-10-08compiler: Seal off the rustc_target::abi enum glob importsJubilee Young-3/+2
2024-10-08Rollup merge of #131170 - madsmtm:target-info-esp32-vendor, r=workingjubileeStuart Cook-0/+3
Fix `target_vendor` in non-IDF Xtensa ESP32 targets `rustc`'s Xtensa ESP32 targets are the following: - `xtensa-esp32-none-elf` - `xtensa-esp32-espidf` - `xtensa-esp32s2-none-elf` - `xtensa-esp32s2-espidf` - `xtensa-esp32s3-none-elf` - `xtensa-esp32s3-espidf` The ESP-IDF targets already set `target_vendor="espressif"`, however, the ESP32 is, from my understanding, produced by Espressif regardless of whether using the IDF or not, so we should set the target vendor there as well?
2024-10-06Enable sanitizers for loongarch64-unknown-*WANG Rui-3/+18
2024-10-06Support clobber_abi in MSP430 inline assemblyTaiki Endo-0/+10
2024-10-05Update target fns to latest mainHenri Lunnikivi-3/+21
2024-10-05Add comment: data_layoutHenri Lunnikivi-0/+9
2024-10-05Add targets: riscv32{e|em|emc}Henri Lunnikivi-0/+79
- Based on riscv32{i|im|imc} - Set data_layout stack alignment: S32 (bits) - Set llvm_abiname = ilp32e
2024-10-04Rollup merge of #131174 - madsmtm:target-info-sparc-abi, r=pnkfelixJubilee-1/+0
Fix `target_abi` in `sparc-unknown-none-elf` This was previously set to `target_abi = "elf"`, but `elf` is not used elsewhere as a target ABI (even though there's many targets that have it in their name), so I've removed it. CC target maintainer ``@jonathanpallant,`` what do you think about this? ``@rustbot`` label O-SPARC
2024-10-04Rollup merge of #131171 - madsmtm:target-info-avr-env, r=petrochenkovJubilee-0/+2
Fix `target_env` in `avr-unknown-gnu-atmega328` The target name itself contains GNU, we should probably reflect that as `target_env = "gnu"` as well? Or from my reading of https://github.com/rust-lang/rust/pull/74941#issuecomment-712219034, perhaps not, but then that should probably be documented somewhere? There's no listed target maintainer, but the target was introduced in https://github.com/rust-lang/rust/pull/74941, so I'll ping the author of that: `@dylanmckay` Relatedly, I wonder _why_ the recommendation is to [create separate target triples for each AVR](https://github.com/Rahix/avr-hal/tree/main/avr-specs), when `-Ctarget-cpu=...` would suffice, perhaps you could also elaborate on that? Was it just because `-Ctarget-cpu=...` didn't exist back then? If so, now that it does, should we now change the target back to e.g. `avr-unknown-none-gnu`, and require the user to set `-Ctarget-cpu=...` instead?