diff options
| author | Ralf Jung <post@ralfj.de> | 2025-02-28 16:56:36 +0100 |
|---|---|---|
| committer | Josh Stone <jistone@redhat.com> | 2025-03-14 14:12:37 -0700 |
| commit | 541b2c60097f3c25ec175d22c33852a7fc3fa3a7 (patch) | |
| tree | 6c093ba96da1cb00fe90ce8a9ada8b4681c3bd36 | |
| parent | 207a543c2188e1d75de96135116a827fc5b53dfa (diff) | |
| download | rust-541b2c60097f3c25ec175d22c33852a7fc3fa3a7.tar.gz rust-541b2c60097f3c25ec175d22c33852a7fc3fa3a7.zip | |
also skip abi_required_features check in rustdoc
(cherry picked from commit 4c939db0e775df21a0b409b7603eaaf0056e8f86)
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/target_features.rs | 15 | ||||
| -rw-r--r-- | tests/rustdoc-ui/target-feature-stability.rs | 16 |
2 files changed, 23 insertions, 8 deletions
diff --git a/compiler/rustc_codegen_ssa/src/target_features.rs b/compiler/rustc_codegen_ssa/src/target_features.rs index bffcdca299b..0c53a731221 100644 --- a/compiler/rustc_codegen_ssa/src/target_features.rs +++ b/compiler/rustc_codegen_ssa/src/target_features.rs @@ -65,11 +65,16 @@ pub(crate) fn from_target_feature_attr( // Only allow target features whose feature gates have been enabled // and which are permitted to be toggled. if let Err(reason) = stability.toggle_allowed(/*enable*/ true) { - tcx.dcx().emit_err(errors::ForbiddenTargetFeatureAttr { - span: item.span(), - feature, - reason, - }); + // We skip this error in rustdoc, where we want to allow all target features of + // all targets, so we can't check their ABI compatibility and anyway we are not + // generating code so "it's fine". + if !tcx.sess.opts.actually_rustdoc { + tcx.dcx().emit_err(errors::ForbiddenTargetFeatureAttr { + span: item.span(), + feature, + reason, + }); + } } else if let Some(nightly_feature) = stability.requires_nightly() && !rust_features.enabled(nightly_feature) { diff --git a/tests/rustdoc-ui/target-feature-stability.rs b/tests/rustdoc-ui/target-feature-stability.rs index 4ade9690310..17fa3ccfe3e 100644 --- a/tests/rustdoc-ui/target-feature-stability.rs +++ b/tests/rustdoc-ui/target-feature-stability.rs @@ -1,9 +1,13 @@ //! This is a regression test for <https://github.com/rust-lang/rust/issues/137366>, ensuring -//! that we can use the `neon` target feature on ARM-32 targets in rustdoc despite there +//! that we can use the `neon` target feature on ARM32 targets in rustdoc despite there //! being a "forbidden" feature of the same name for aarch64, and rustdoc merging the //! target features of all targets. //@ check-pass -//@ compile-flags: --target armv7-unknown-linux-gnueabihf +//@ revisions: arm aarch64 +//@[arm] compile-flags: --target armv7-unknown-linux-gnueabihf +//@[arm] needs-llvm-components: arm +//@[aarch64] compile-flags: --target aarch64-unknown-none-softfloat +//@[aarch64] needs-llvm-components: aarch64 #![crate_type = "lib"] #![feature(no_core, lang_items)] @@ -15,4 +19,10 @@ pub trait Sized {} // `fp-armv8` is "forbidden" on aarch64 as we tie it to `neon`. #[target_feature(enable = "fp-armv8")] -pub fn fun() {} +pub fn fun1() {} + +// This would usually be rejected as it changes the ABI. +// But we disable that check in rustdoc since we are building "for all targets" and the +// check can't really handle that. +#[target_feature(enable = "soft-float")] +pub fn fun2() {} |
