diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-01-16 14:46:06 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-03-24 13:06:52 +0100 |
commit | 9061a823a114f1cd8c81ffafcba4eca31b0d1c96 (patch) | |
tree | 4e3d84ed125ebc4b791d1071663f5ee7ae97b298 /gcc | |
parent | 2bee6000c3d18de68a8a2d233a2dd5f8cd177dc7 (diff) | |
download | gcc-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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/expand/rust-derive-copy.cc | 9 |
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; |