https://gcc.gnu.org/g:9061a823a114f1cd8c81ffafcba4eca31b0d1c96

commit r15-8731-g9061a823a114f1cd8c81ffafcba4eca31b0d1c96
Author: Arthur Cohen <arthur.co...@embecosm.com>
Date:   Thu Jan 16 14:46:06 2025 +0100

    gccrs: derive(Copy): Improve bounds when deriving Copy
    
    gcc/rust/ChangeLog:
    
            * expand/rust-derive-copy.cc: Always add an extra Copy bound on 
generic Copy impls.

Diff:
---
 gcc/rust/expand/rust-derive-copy.cc | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/gcc/rust/expand/rust-derive-copy.cc 
b/gcc/rust/expand/rust-derive-copy.cc
index 31b4819c0429..1d5f72bd656c 100644
--- a/gcc/rust/expand/rust-derive-copy.cc
+++ b/gcc/rust/expand/rust-derive-copy.cc
@@ -52,7 +52,7 @@ DeriveCopy::copy_impl (
   // for example:
   //
   // #[derive(Copy)]
-  // struct Be<T: Copy> { ... }
+  // struct Be<T> { ... }
   //
   // we need to generate the impl block:
   //
@@ -87,7 +87,12 @@ DeriveCopy::copy_impl (
              = GenericArg::create_type (std::move (associated_type));
            generic_args.push_back (std::move (type_arg));
 
-           auto impl_type_param = builder.new_type_param (type_param);
+           std::vector<std::unique_ptr<TypeParamBound>> extra_bounds;
+           extra_bounds.emplace_back (std::unique_ptr<TypeParamBound> (
+             new TraitBound (builder.type_path (LangItem::Kind::COPY), loc)));
+
+           auto impl_type_param
+             = builder.new_type_param (type_param, std::move (extra_bounds));
            impl_generics.push_back (std::move (impl_type_param));
          }
          break;

Reply via email to