aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2025-01-16 14:46:06 +0100
committerArthur Cohen <arthur.cohen@embecosm.com>2025-03-24 13:06:52 +0100
commit9061a823a114f1cd8c81ffafcba4eca31b0d1c96 (patch)
tree4e3d84ed125ebc4b791d1071663f5ee7ae97b298
parent2bee6000c3d18de68a8a2d233a2dd5f8cd177dc7 (diff)
downloadgcc-9061a823a114f1cd8c81ffafcba4eca31b0d1c96.zip
gcc-9061a823a114f1cd8c81ffafcba4eca31b0d1c96.tar.gz
gcc-9061a823a114f1cd8c81ffafcba4eca31b0d1c96.tar.bz2
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.
-rw-r--r--gcc/rust/expand/rust-derive-copy.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/rust/expand/rust-derive-copy.cc b/gcc/rust/expand/rust-derive-copy.cc
index 31b4819..1d5f72b 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;