From caabc4b695e462dc11426eddbe8d8eb76db9a176 Mon Sep 17 00:00:00 2001 From: Makai Date: Wed, 22 Apr 2026 15:11:07 +0800 Subject: [PATCH] Avoid regression in `derive(PartialOrd)` for zero-variant enums --- .../rustc_builtin_macros/src/deriving/cmp/partial_ord.rs | 5 ++++- tests/ui/derives/deriving-all-codegen.stdout | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs index b618580d8afb..5a66c2871db2 100644 --- a/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs +++ b/compiler/rustc_builtin_macros/src/deriving/cmp/partial_ord.rs @@ -57,8 +57,11 @@ pub(crate) fn expand_deriving_partial_ord( })); let (is_simple, substructure) = match item { Annotatable::Item(annitem) => match &annitem.kind { - // For unit structs, the default generated code is better. + // For unit structs/zero-variant enums, the default generated code is better. ItemKind::Struct(.., ast::VariantData::Unit(..)) => (false, default_substructure), + ItemKind::Enum(.., enum_def) if enum_def.variants.is_empty() => { + (false, default_substructure) + } ItemKind::Struct(_, ast::Generics { params, .. }, _) | ItemKind::Enum(_, ast::Generics { params, .. }, _) if is_simple_candidate(params) => diff --git a/tests/ui/derives/deriving-all-codegen.stdout b/tests/ui/derives/deriving-all-codegen.stdout index 55c1286800c5..0fbcda77bba9 100644 --- a/tests/ui/derives/deriving-all-codegen.stdout +++ b/tests/ui/derives/deriving-all-codegen.stdout @@ -1016,7 +1016,7 @@ impl ::core::cmp::PartialOrd for Enum0 { #[inline] fn partial_cmp(&self, other: &Enum0) -> ::core::option::Option<::core::cmp::Ordering> { - ::core::option::Option::Some(::core::cmp::Ord::cmp(self, other)) + match *self {} } } #[automatically_derived]