diff options
| author | bors <bors@rust-lang.org> | 2021-08-18 01:00:17 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-08-18 01:00:17 +0000 |
| commit | 02b27f1e70fc60a8f2aa0982e80d7cde5889112e (patch) | |
| tree | 065c73132ec35f5b5bd53d02f0734b81cbf444ed /compiler/rustc_feature/src | |
| parent | adf168844791b213383b18d10515eaee88695f7d (diff) | |
| parent | 7a62f29f3171767090949778ce0f161e930706b9 (diff) | |
| download | rust-02b27f1e70fc60a8f2aa0982e80d7cde5889112e.tar.gz rust-02b27f1e70fc60a8f2aa0982e80d7cde5889112e.zip | |
Auto merge of #86860 - fee1-dead:stabilize, r=LeSeulArtichaut
Stabilize `arbitrary_enum_discriminant`
Closes #60553.
----
## Stabilization Report
_copied from https://github.com/rust-lang/rust/issues/60553#issuecomment-865922311_
### Summary
Enables a user to specify *explicit* discriminants on arbitrary enums.
Previously, this was hard to achieve:
```rust
#[repr(u8)]
enum Foo {
A(u8) = 0,
B(i8) = 1,
C(bool) = 42,
}
```
Someone would need to add 41 hidden variants in between as a workaround with implicit discriminants.
In conjunction with [RFC 2195](https://github.com/rust-lang/rfcs/blob/master/text/2195-really-tagged-unions.md), this feature would provide more flexibility for FFI and unsafe code involving enums.
### Test cases
Most tests are in [`src/test/ui/enum-discriminant`](https://github.com/rust-lang/rust/tree/master/src/test/ui/enum-discriminant), there are two [historical](https://github.com/rust-lang/rust/blob/master/src/test/ui/parser/tag-variant-disr-non-nullary.rs) [tests](https://github.com/rust-lang/rust/blob/master/src/test/ui/parser/issue-17383.rs) that are now covered by the feature (removed by this pr due to them being obsolete).
### Edge cases
The feature is well defined and does not have many edge cases.
One [edge case](https://github.com/rust-lang/rust/issues/70509) was related to another unstable feature named `repr128` and is resolved.
### Previous PRs
The [implementation PR](https://github.com/rust-lang/rust/pull/60732) added documentation to the Unstable Book, https://github.com/rust-lang/reference/pull/1055 was opened as a continuation of https://github.com/rust-lang/reference/pull/639.
### Resolution of unresolved questions
The questions are resolved in https://github.com/rust-lang/rust/issues/60553#issuecomment-511235271.
----
(someone please add `needs-fcp`)
Diffstat (limited to 'compiler/rustc_feature/src')
| -rw-r--r-- | compiler/rustc_feature/src/accepted.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_feature/src/active.rs | 3 |
2 files changed, 2 insertions, 3 deletions
diff --git a/compiler/rustc_feature/src/accepted.rs b/compiler/rustc_feature/src/accepted.rs index 9ce5a149697..f3c710e0f6a 100644 --- a/compiler/rustc_feature/src/accepted.rs +++ b/compiler/rustc_feature/src/accepted.rs @@ -294,6 +294,8 @@ declare_features! ( (accepted, const_fn_transmute, "1.56.0", Some(53605), None), /// Allows accessing fields of unions inside `const` functions. (accepted, const_fn_union, "1.56.0", Some(51909), None), + /// Allows explicit discriminants on non-unit enum variants. + (accepted, arbitrary_enum_discriminant, "1.56.0", Some(60553), None), // ------------------------------------------------------------------------- // feature-group-end: accepted features diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index 56dac253c54..2e4b122f80c 100644 --- a/compiler/rustc_feature/src/active.rs +++ b/compiler/rustc_feature/src/active.rs @@ -471,9 +471,6 @@ declare_features! ( /// Allows #[repr(transparent)] on unions (RFC 2645). (active, transparent_unions, "1.37.0", Some(60405), None), - /// Allows explicit discriminants on non-unit enum variants. - (active, arbitrary_enum_discriminant, "1.37.0", Some(60553), None), - /// Allows `async || body` closures. (active, async_closure, "1.37.0", Some(62290), None), |
