diff options
| author | Scott McMurray <scottmcm@users.noreply.github.com> | 2023-01-17 22:44:16 -0800 |
|---|---|---|
| committer | Scott McMurray <scottmcm@users.noreply.github.com> | 2023-01-18 19:19:28 -0800 |
| commit | 3122db7d038734ab4b0d92d799763ce1ac43580d (patch) | |
| tree | 35209482eca2779043b75a4a903e723de25df5a5 | |
| parent | e08b379d5d5840a2976d73d1754e8821a9973b66 (diff) | |
| download | rust-3122db7d038734ab4b0d92d799763ce1ac43580d.tar.gz rust-3122db7d038734ab4b0d92d799763ce1ac43580d.zip | |
Implement `SpecOptionPartialEq` for `cmp::Ordering`
| -rw-r--r-- | library/core/src/option.rs | 10 | ||||
| -rw-r--r-- | tests/codegen/option-nonzero-eq.rs | 10 |
2 files changed, 19 insertions, 1 deletions
diff --git a/library/core/src/option.rs b/library/core/src/option.rs index 7cc00e3f8d1..4aeb707fa67 100644 --- a/library/core/src/option.rs +++ b/library/core/src/option.rs @@ -551,7 +551,7 @@ use crate::marker::Destruct; use crate::panicking::{panic, panic_str}; use crate::pin::Pin; use crate::{ - convert, hint, mem, + cmp, convert, hint, mem, ops::{self, ControlFlow, Deref, DerefMut}, }; @@ -2146,6 +2146,14 @@ impl<T> SpecOptionPartialEq for crate::ptr::NonNull<T> { } } +#[stable(feature = "rust1", since = "1.0.0")] +impl SpecOptionPartialEq for cmp::Ordering { + #[inline] + fn eq(l: &Option<Self>, r: &Option<Self>) -> bool { + l.map_or(2, |x| x as i8) == r.map_or(2, |x| x as i8) + } +} + ///////////////////////////////////////////////////////////////////////////// // The Option Iterators ///////////////////////////////////////////////////////////////////////////// diff --git a/tests/codegen/option-nonzero-eq.rs b/tests/codegen/option-nonzero-eq.rs index 598dcc19b49..835decd3e5f 100644 --- a/tests/codegen/option-nonzero-eq.rs +++ b/tests/codegen/option-nonzero-eq.rs @@ -3,6 +3,7 @@ #![crate_type = "lib"] extern crate core; +use core::cmp::Ordering; use core::num::{NonZeroU32, NonZeroI64}; use core::ptr::NonNull; @@ -32,3 +33,12 @@ pub fn non_null_eq(l: Option<NonNull<u8>>, r: Option<NonNull<u8>>) -> bool { // CHECK-NEXT: ret i1 l == r } + +// CHECK-lABEL: @ordering_eq +#[no_mangle] +pub fn ordering_eq(l: Option<Ordering>, r: Option<Ordering>) -> bool { + // CHECK: start: + // CHECK-NEXT: icmp eq i8 + // CHECK-NEXT: ret i1 + l == r +} |
