From 2bee6000c3d18de68a8a2d233a2dd5f8cd177dc7 Mon Sep 17 00:00:00 2001 From: Arthur Cohen Date: Mon, 20 Jan 2025 11:36:53 +0000 Subject: [PATCH] gccrs: derive(Clone): Use lang item bounds on AssertParamIsCopy gcc/rust/ChangeLog: * expand/rust-derive-clone.cc (DeriveClone::visit_union): Use lang items for Copy and Sized bounds. gcc/testsuite/ChangeLog: * rust/compile/derive_macro6.rs: Add lang item attribute to Copy trait. --- gcc/rust/expand/rust-derive-clone.cc | 11 +++++------ gcc/testsuite/rust/compile/derive_macro6.rs | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/gcc/rust/expand/rust-derive-clone.cc b/gcc/rust/expand/rust-derive-clone.cc index 0081eb4cdaa..18f7723ddc2 100644 --- a/gcc/rust/expand/rust-derive-clone.cc +++ b/gcc/rust/expand/rust-derive-clone.cc @@ -422,17 +422,16 @@ DeriveClone::visit_union (Union &item) // FIXME: Should be $crate::core::clone::AssertParamIsCopy (or similar) // (Rust-GCC#3329) - auto copy_path = TypePath (vec (builder.type_path_segment ("Copy")), loc); - auto sized_path = TypePath (vec (builder.type_path_segment ("Sized")), loc); + auto copy_path = builder.type_path (LangItem::Kind::COPY); + auto sized_path = builder.type_path (LangItem::Kind::SIZED); auto copy_bound = std::unique_ptr ( new TraitBound (copy_path, item.get_locus ())); auto sized_bound = std::unique_ptr ( - new TraitBound (sized_path, item.get_locus (), false, true)); + new TraitBound (sized_path, item.get_locus (), false, + true /* opening_question_mark */)); - auto bounds = std::vector> (); - bounds.emplace_back (std::move (copy_bound)); - bounds.emplace_back (std::move (sized_bound)); + auto bounds = vec (std::move (copy_bound), std::move (sized_bound)); // struct AssertParamIsCopy { _t: PhantomData } auto assert_param_is_copy = "AssertParamIsCopy"; diff --git a/gcc/testsuite/rust/compile/derive_macro6.rs b/gcc/testsuite/rust/compile/derive_macro6.rs index 35327c03b54..412144d5917 100644 --- a/gcc/testsuite/rust/compile/derive_macro6.rs +++ b/gcc/testsuite/rust/compile/derive_macro6.rs @@ -1,9 +1,9 @@ #[lang = "sized"] pub trait Sized {} +#[lang = "copy"] pub trait Copy {} - #[lang = "clone"] pub trait Clone { fn clone(&self) -> Self; -- 2.47.2