2 files changed +20
-8
lines changed Original file line number Diff line number Diff line change @@ -87,12 +87,17 @@ pub(crate) fn from_target_feature_attr(
87
87
// But ensure the ABI does not forbid enabling this.
88
88
// Here we do assume that LLVM doesn't add even more implied features
89
89
// 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
+ }
96
101
}
97
102
target_features. push ( TargetFeature { name, implied : name != feature_sym } )
98
103
}
Original file line number Diff line number Diff line change 3
3
//! being a "forbidden" feature of the same name for aarch64, and rustdoc merging the
4
4
//! target features of all targets.
5
5
//@ check-pass
6
- //@ compile-flags: --target armv7-unknown-linux-gnueabihf
6
+ //@ revisions: arm aarch64
7
+ //@[arm] compile-flags: --target armv7-unknown-linux-gnueabihf
8
+ //@[aarch64] compile-flags: --target aarch64-unknown-none-softfloat
7
9
8
10
#![ crate_type = "lib" ]
9
11
#![ feature( no_core, lang_items) ]
@@ -15,4 +17,9 @@ pub trait Sized {}
15
17
16
18
// `fp-armv8` is "forbidden" on aarch64 as we tie it to `neon`.
17
19
#[ target_feature( enable = "fp-armv8" ) ]
18
- pub fn fun ( ) { }
20
+ pub fn fun1 ( ) { }
21
+
22
+ // This would usually be rejected on aarch64-softfloat as it changes the ABI.
23
+ // But it can legimiately occur on ARMv7 so we have to accept it in rustdoc on all targets.
24
+ #[ target_feature( enable = "neon" ) ]
25
+ pub fn fun2 ( ) { }
0 commit comments