Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `no_drop` item-level option to `ZeroizeOnDrop` which does not implement
`Drop` but instead only asserts that every field implements `ZeroizeOnDrop`.

### Changed
- Remove unnecessary validation of the default discriminant type for enums.

### Fixed
- Stop depending on unstable APIs for `Eq` for `ZeroizeOnDrop`.

Expand Down
5 changes: 0 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -278,11 +278,6 @@ supported.

Unions only support [`Clone`] and [`Copy`].

[`PartialOrd`] and [`Ord`] need to determine the discriminant type to
function correctly. To protect against a potential future change to the
default discriminant type, some compile-time validation is inserted to
ascertain that the type remains `isize`.

### `no_std` support

`no_std` support is provided by default.
Expand Down
134 changes: 36 additions & 98 deletions src/test/discriminant.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,10 @@ fn default() -> Result<()> {
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const fn __discriminant(__this: &Test) -> isize {
const __VALIDATE_ISIZE_A: isize = 0;
const __VALIDATE_ISIZE_B: isize = (0) + 1;
const __VALIDATE_ISIZE_C: isize = (0) + 2;

match __this {
Test::A => __VALIDATE_ISIZE_A,
Test::B => __VALIDATE_ISIZE_B,
Test::C => __VALIDATE_ISIZE_C
Test::A => 0,
Test::B => (0) + 1,
Test::C => (0) + 2
}
}

Expand Down Expand Up @@ -66,10 +62,6 @@ fn default_clone() -> Result<()> {
};
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const __VALIDATE_ISIZE_A: isize = 0;
const __VALIDATE_ISIZE_B: isize = (0) + 1;
const __VALIDATE_ISIZE_C: isize = (0) + 2;

::core::cmp::PartialOrd::partial_cmp(&(::core::clone::Clone::clone(self) as isize), &(::core::clone::Clone::clone(__other) as isize))
};

Expand Down Expand Up @@ -122,10 +114,6 @@ fn default_copy() -> Result<()> {
};
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const __VALIDATE_ISIZE_A: isize = 0;
const __VALIDATE_ISIZE_B: isize = (0) + 1;
const __VALIDATE_ISIZE_C: isize = (0) + 2;

::core::cmp::PartialOrd::partial_cmp(&(*self as isize), &(*__other as isize))
};

Expand Down Expand Up @@ -170,14 +158,10 @@ fn default_reverse() -> Result<()> {
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const fn __discriminant(__this: &Test) -> isize {
const __VALIDATE_ISIZE_A: isize = 2;
const __VALIDATE_ISIZE_B: isize = 1;
const __VALIDATE_ISIZE_C: isize = 0;

match __this {
Test::A => __VALIDATE_ISIZE_A,
Test::B => __VALIDATE_ISIZE_B,
Test::C => __VALIDATE_ISIZE_C
Test::A => 2,
Test::B => 1,
Test::C => 0
}
}

Expand Down Expand Up @@ -222,16 +206,11 @@ fn default_mix() -> Result<()> {
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const fn __discriminant(__this: &Test) -> isize {
const __VALIDATE_ISIZE_A: isize = 1;
const __VALIDATE_ISIZE_B: isize = 0;
const __VALIDATE_ISIZE_C: isize = 2;
const __VALIDATE_ISIZE_D: isize = (2) + 1;

match __this {
Test::A => __VALIDATE_ISIZE_A,
Test::B => __VALIDATE_ISIZE_B,
Test::C => __VALIDATE_ISIZE_C,
Test::D => __VALIDATE_ISIZE_D
Test::A => 1,
Test::B => 0,
Test::C => 2,
Test::D => (2) + 1
}
}

Expand Down Expand Up @@ -277,18 +256,12 @@ fn default_skip() -> Result<()> {
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const fn __discriminant(__this: &Test) -> isize {
const __VALIDATE_ISIZE_A: isize = 0;
const __VALIDATE_ISIZE_B: isize = 3;
const __VALIDATE_ISIZE_C: isize = (3) + 1;
const __VALIDATE_ISIZE_D: isize = (3) + 2;
const __VALIDATE_ISIZE_E: isize = (3) + 3;

match __this {
Test::A => __VALIDATE_ISIZE_A,
Test::B => __VALIDATE_ISIZE_B,
Test::C => __VALIDATE_ISIZE_C,
Test::D => __VALIDATE_ISIZE_D,
Test::E => __VALIDATE_ISIZE_E
Test::A => 0,
Test::B => 3,
Test::C => (3) + 1,
Test::D => (3) + 2,
Test::E => (3) + 3
}
}

Expand Down Expand Up @@ -335,14 +308,10 @@ fn default_expr() -> Result<()> {
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const fn __discriminant(__this: &Test) -> isize {
const __VALIDATE_ISIZE_A: isize = isize::MAX - 2;
const __VALIDATE_ISIZE_B: isize = (isize::MAX - 2) + 1;
const __VALIDATE_ISIZE_C: isize = (isize::MAX - 2) + 2;

match __this {
Test::A => __VALIDATE_ISIZE_A,
Test::B => __VALIDATE_ISIZE_B,
Test::C => __VALIDATE_ISIZE_C
Test::A => isize::MAX - 2,
Test::B => (isize::MAX - 2) + 1,
Test::C => (isize::MAX - 2) + 2
}
}

Expand Down Expand Up @@ -387,14 +356,10 @@ fn repr_c() -> Result<()> {
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const fn __discriminant(__this: &Test) -> isize {
const __VALIDATE_ISIZE_A: isize = 0;
const __VALIDATE_ISIZE_B: isize = (0) + 1;
const __VALIDATE_ISIZE_C: isize = (0) + 2;

match __this {
Test::A => __VALIDATE_ISIZE_A,
Test::B => __VALIDATE_ISIZE_B,
Test::C => __VALIDATE_ISIZE_C
Test::A => 0,
Test::B => (0) + 1,
Test::C => (0) + 2
}
}

Expand Down Expand Up @@ -488,10 +453,6 @@ fn repr_c_clone() -> Result<()> {
};
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const __VALIDATE_ISIZE_A: isize = 0;
const __VALIDATE_ISIZE_B: isize = (0) + 1;
const __VALIDATE_ISIZE_C: isize = (0) + 2;

::core::cmp::PartialOrd::partial_cmp(&(::core::clone::Clone::clone(self) as isize), &(::core::clone::Clone::clone(__other) as isize))
};

Expand Down Expand Up @@ -598,10 +559,6 @@ fn repr_c_copy() -> Result<()> {
};
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const __VALIDATE_ISIZE_A: isize = 0;
const __VALIDATE_ISIZE_B: isize = (0) + 1;
const __VALIDATE_ISIZE_C: isize = (0) + 2;

::core::cmp::PartialOrd::partial_cmp(&(*self as isize), &(*__other as isize))
};

Expand Down Expand Up @@ -691,14 +648,10 @@ fn repr_c_reverse() -> Result<()> {
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const fn __discriminant(__this: &Test) -> isize {
const __VALIDATE_ISIZE_A: isize = 2;
const __VALIDATE_ISIZE_B: isize = 1;
const __VALIDATE_ISIZE_C: isize = 0;

match __this {
Test::A => __VALIDATE_ISIZE_A,
Test::B => __VALIDATE_ISIZE_B,
Test::C => __VALIDATE_ISIZE_C
Test::A => 2,
Test::B => 1,
Test::C => 0
}
}

Expand Down Expand Up @@ -744,16 +697,11 @@ fn repr_c_mix() -> Result<()> {
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const fn __discriminant(__this: &Test) -> isize {
const __VALIDATE_ISIZE_A: isize = 1;
const __VALIDATE_ISIZE_B: isize = 0;
const __VALIDATE_ISIZE_C: isize = 2;
const __VALIDATE_ISIZE_D: isize = (2) + 1;

match __this {
Test::A => __VALIDATE_ISIZE_A,
Test::B => __VALIDATE_ISIZE_B,
Test::C => __VALIDATE_ISIZE_C,
Test::D => __VALIDATE_ISIZE_D
Test::A => 1,
Test::B => 0,
Test::C => 2,
Test::D => (2) + 1
}
}

Expand Down Expand Up @@ -800,18 +748,12 @@ fn repr_c_skip() -> Result<()> {
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const fn __discriminant(__this: &Test) -> isize {
const __VALIDATE_ISIZE_A: isize = 0;
const __VALIDATE_ISIZE_B: isize = 3;
const __VALIDATE_ISIZE_C: isize = (3) + 1;
const __VALIDATE_ISIZE_D: isize = (3) + 2;
const __VALIDATE_ISIZE_E: isize = (3) + 3;

match __this {
Test::A => __VALIDATE_ISIZE_A,
Test::B => __VALIDATE_ISIZE_B,
Test::C => __VALIDATE_ISIZE_C,
Test::D => __VALIDATE_ISIZE_D,
Test::E => __VALIDATE_ISIZE_E
Test::A => 0,
Test::B => 3,
Test::C => (3) + 1,
Test::D => (3) + 2,
Test::E => (3) + 3
}
}

Expand Down Expand Up @@ -859,14 +801,10 @@ fn repr_c_expr() -> Result<()> {
#[cfg(not(feature = "nightly"))]
let partial_ord = quote! {
const fn __discriminant(__this: &Test) -> isize {
const __VALIDATE_ISIZE_A: isize = isize::MAX - 2;
const __VALIDATE_ISIZE_B: isize = (isize::MAX - 2) + 1;
const __VALIDATE_ISIZE_C: isize = (isize::MAX - 2) + 2;

match __this {
Test::A => __VALIDATE_ISIZE_A,
Test::B => __VALIDATE_ISIZE_B,
Test::C => __VALIDATE_ISIZE_C
Test::A => isize::MAX - 2,
Test::B => (isize::MAX - 2) + 1,
Test::C => (isize::MAX - 2) + 2
}
}

Expand Down
Loading