From 2c29462e89a38729a8bfd3a0e88cc9e6a151a782 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Fri, 7 Feb 2025 10:49:11 -0500 Subject: [PATCH] Fix type inference failures in PartialOrd/Ord impls --- src/trait_handlers/ord/ord_enum.rs | 2 +- src/trait_handlers/partial_ord/partial_ord_enum.rs | 2 +- tests/ord_enum.rs | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/trait_handlers/ord/ord_enum.rs b/src/trait_handlers/ord/ord_enum.rs index 0edcb89..28e4b0e 100644 --- a/src/trait_handlers/ord/ord_enum.rs +++ b/src/trait_handlers/ord/ord_enum.rs @@ -210,7 +210,7 @@ impl TraitHandler for OrdEnumHandler { } else { let discriminant_cmp = quote! { unsafe { - ::core::cmp::Ord::cmp(&*<*const _>::from(self).cast::<#discriminant_type>(), &*<*const _>::from(other).cast::<#discriminant_type>()) + ::core::cmp::Ord::cmp(&*<*const Self>::from(self).cast::<#discriminant_type>(), &*<*const Self>::from(other).cast::<#discriminant_type>()) } }; diff --git a/src/trait_handlers/partial_ord/partial_ord_enum.rs b/src/trait_handlers/partial_ord/partial_ord_enum.rs index c41036f..e2c5930 100644 --- a/src/trait_handlers/partial_ord/partial_ord_enum.rs +++ b/src/trait_handlers/partial_ord/partial_ord_enum.rs @@ -215,7 +215,7 @@ impl TraitHandler for PartialOrdEnumHandler { } else { let discriminant_cmp = quote! { unsafe { - ::core::cmp::Ord::cmp(&*<*const _>::from(self).cast::<#discriminant_type>(), &*<*const _>::from(other).cast::<#discriminant_type>()) + ::core::cmp::Ord::cmp(&*<*const Self>::from(self).cast::<#discriminant_type>(), &*<*const Self>::from(other).cast::<#discriminant_type>()) } }; diff --git a/tests/ord_enum.rs b/tests/ord_enum.rs index c5d01a7..5a05f0f 100644 --- a/tests/ord_enum.rs +++ b/tests/ord_enum.rs @@ -630,3 +630,11 @@ fn use_partial_ord_attr_ignore() { assert_eq!(Ordering::Less, Enum::Tuple(1, 2).cmp(&Enum::Tuple(1, 3))); assert_eq!(Ordering::Equal, Enum::Tuple(2, 2).cmp(&Enum::Tuple(1, 2))); } + +struct PoisonTypeInference; + +impl From<&PoisonTypeInference> for *const () { + fn from(value: &PoisonTypeInference) -> Self { + value as *const PoisonTypeInference as *const () + } +}