From: Arthur Cohen <arthur.co...@embecosm.com>

gcc/rust/ChangeLog:

        * expand/rust-derive-copy.cc: Always add an extra Copy bound on generic 
Copy impls.
---
 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 31b4819c042..1d5f72bd656 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;
-- 
2.45.2

Reply via email to