Skip to content

Commit 4c939db

Browse files
committed
also skip abi_required_features check in rustdoc
1 parent dc04c0c commit 4c939db

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

compiler/rustc_codegen_ssa/src/target_features.rs

+11-6
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,17 @@ pub(crate) fn from_target_feature_attr(
8787
// But ensure the ABI does not forbid enabling this.
8888
// Here we do assume that LLVM doesn't add even more implied features
8989
// we don't know about, at least no features that would have ABI effects!
90-
if abi_feature_constraints.incompatible.contains(&name.as_str()) {
91-
tcx.dcx().emit_err(errors::ForbiddenTargetFeatureAttr {
92-
span: item.span(),
93-
feature: name.as_str(),
94-
reason: "this feature is incompatible with the target ABI",
95-
});
90+
// We skip this logic in rustdoc, where we want to allow all target features of
91+
// all targets, so we can't check their ABI compatibility and anyway we are not
92+
// generating code so "it's fine".
93+
if !tcx.sess.opts.actually_rustdoc {
94+
if abi_feature_constraints.incompatible.contains(&name.as_str()) {
95+
tcx.dcx().emit_err(errors::ForbiddenTargetFeatureAttr {
96+
span: item.span(),
97+
feature: name.as_str(),
98+
reason: "this feature is incompatible with the target ABI",
99+
});
100+
}
96101
}
97102
target_features.push(TargetFeature { name, implied: name != feature_sym })
98103
}

tests/rustdoc-ui/target-feature-stability.rs

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
//! This is a regression test for <https://github.com/rust-lang/rust/issues/137366>, ensuring
2-
//! that we can use the `neon` target feature on ARM-32 targets in rustdoc despite there
2+
//! that we can use the `neon` target feature on ARM32 targets in rustdoc despite there
33
//! being a "forbidden" feature of the same name for aarch64, and rustdoc merging the
44
//! target features of all targets.
55
//@ check-pass
6-
//@ compile-flags: --target armv7-unknown-linux-gnueabihf
6+
//@ revisions: arm aarch64
7+
//@[arm] compile-flags: --target armv7-unknown-linux-gnueabihf
8+
//@[arm] needs-llvm-components: arm
9+
//@[aarch64] compile-flags: --target aarch64-unknown-none-softfloat
10+
//@[aarch64] needs-llvm-components: aarch64
711

812
#![crate_type = "lib"]
913
#![feature(no_core, lang_items)]
@@ -15,4 +19,10 @@ pub trait Sized {}
1519

1620
// `fp-armv8` is "forbidden" on aarch64 as we tie it to `neon`.
1721
#[target_feature(enable = "fp-armv8")]
18-
pub fn fun() {}
22+
pub fn fun1() {}
23+
24+
// This would usually be rejected as it changes the ABI.
25+
// But we disable that check in rustdoc since we are building "for all targets" and the
26+
// check can't really handle that.
27+
#[target_feature(enable = "soft-float")]
28+
pub fn fun2() {}

0 commit comments

Comments
 (0)