-
Notifications
You must be signed in to change notification settings - Fork 13.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rustdoc: Output target feature information #139393
base: master
Are you sure you want to change the base?
rustdoc: Output target feature information #139393
Conversation
r? @notriddle rustbot has assigned @notriddle. Use |
This comment has been minimized.
This comment has been minimized.
7c6a12b
to
cb2b075
Compare
rustdoc-json-types is a public (although nightly-only) API. If possible, consider changing |
I'm unsure about two topics here:
Besides stable and unstable, there is also /// This feature can not be set via `-Ctarget-feature` or `#[target_feature]`, it can only be
/// set in the target spec. It is never set in `cfg(target_feature)`. Used in
/// particular for features are actually ABI configuration flags (not all targets are as nice as
/// RISC-V and have an explicit way to set the ABI separate from target features).
Forbidden { reason: &'static str }, I decided forbidden features are effectively internal implementation details (unreachable by the user) and so I drop them from the list. |
A new struct field is backwards compatible (edit: if it's |
`#[target_feature]` attributes refer to a target-specific list of features. Enabling certain features can imply enabling other features. Certain features are always enabled on certain targets, since they are required by the target's ABI. Features can also be enabled indirectly based on other compiler flags. Feature information is ultimately known to `rustc`. Rather than force external tools to track it -- which may be wildly impractical due to `-C target-cpu` -- have `rustdoc` output `rustc`'s feature data.
cb2b075
to
58fd7b4
Compare
Got it. Is there a better way to phrase this requirement, and if so, would it belong in this PR? rust/src/rustdoc-json-types/lib.rs Lines 28 to 33 in 58fd7b4
|
Looking closer at your code I think this is actually a breaking change since the new field is not To be clear: I expect JSON from an old nightly to fail to deserialize into the new struct, but I expect JSON from a new nightly to successfully deserialize into the old struct. |
Oh, sure, I was thinking about the old-reading-new case and not the new-reading-old case. You're absolutely right that this is a breaking change. |
#[target_feature]
attributes refer to a target-specific list of features. Enabling certain features can imply enabling other features. Certain features are always enabled on certain targets, since they are required by the target's ABI. Features can also be enabled indirectly based on other compiler flags.Feature information is ultimately known to
rustc
. Rather than force external tools to track it – which may be wildly impractical due to-C target-cpu
– haverustdoc
outputrustc
's feature data.This change is motivated by obi1kenobi/cargo-semver-checks#1246, which intends to detect semver hazards caused by
#[target_feature]
.