From: Arthur Cohen Date: Fri, 18 Apr 2025 16:30:46 +0000 (+0200) Subject: gccrs: derive(Ord, PartialOrd): Handle tuples properly X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2cf21f899577fa534bcf0e5854d77a82472234ab;p=thirdparty%2Fgcc.git gccrs: derive(Ord, PartialOrd): Handle tuples properly gcc/rust/ChangeLog: * expand/rust-derive-ord.cc (is_last): Remove. (DeriveOrd::visit_tuple): Fix implementation. --- diff --git a/gcc/rust/expand/rust-derive-ord.cc b/gcc/rust/expand/rust-derive-ord.cc index 2403e9c2a33..e39c6b44ca4 100644 --- a/gcc/rust/expand/rust-derive-ord.cc +++ b/gcc/rust/expand/rust-derive-ord.cc @@ -123,15 +123,6 @@ DeriveOrd::make_cmp_arms () builder.match_arm (std::move (non_equal))}; } -template -inline bool -is_last (T &elt, std::vector &vec) -{ - rust_assert (!vec.empty ()); - - return &elt == &vec.back (); -} - std::unique_ptr DeriveOrd::recursive_match (std::vector &&members) { @@ -210,7 +201,14 @@ DeriveOrd::visit_struct (StructStruct &item) // straightforward once we have `visit_struct` working void DeriveOrd::visit_tuple (TupleStruct &item) -{} +{ + auto fields = SelfOther::indexes (builder, item.get_fields ()); + + auto match_expr = recursive_match (std::move (fields)); + + expanded = cmp_impl (builder.block (std::move (match_expr)), + item.get_identifier (), item.get_generic_params ()); +} // for enums, we need to generate a match for each of the enum's variant that // contains data and then do the same thing as visit_struct or visit_enum. if