From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id 6D21E3858D33; Tue, 7 Feb 2023 17:56:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6D21E3858D33 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1675792581; bh=ZYHq79yLXVXL/pyGdgdzraSD7GME5YoWAtsYpWHbgbE=; h=From:To:Subject:Date:From; b=ry+pZ/Ccs1fW+CBHkVjf7EeU4AAKfSNON/t1kSJTTTiobYDVuCiUoYQdERIN5ihzc ibsMzSqjxyt3h3pLd7gH0ZN2yw5hLmWGsaR9gRzVpq87ApC8FmYnZqjQbBV9Dhyp3J 4BnMJD9ILzRCSY8cOpQAUvRMUwQvWXmU3Na/mUTo= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Thomas Schwinge To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/rust/master] gccrs: Add missing Sized, Copy and Clone lang item mappings X-Act-Checkin: gcc X-Git-Author: Philip Herron X-Git-Refname: refs/heads/devel/rust/master X-Git-Oldrev: e612713029296dac8429e4b00ec7659bcad5cffe X-Git-Newrev: d4e6b64e7f9e23aeb5d3c40665f18091575921ed Message-Id: <20230207175621.6D21E3858D33@sourceware.org> Date: Tue, 7 Feb 2023 17:56:21 +0000 (GMT) List-Id: https://gcc.gnu.org/g:d4e6b64e7f9e23aeb5d3c40665f18091575921ed commit d4e6b64e7f9e23aeb5d3c40665f18091575921ed Author: Philip Herron Date: Tue Jan 31 14:39:29 2023 +0000 gccrs: Add missing Sized, Copy and Clone lang item mappings We need these lang items to be defined and later down the line the mappings will be used to implement proper copy and clone logic. Fixes #1786 Signed-off-by: Philip Herron gcc/rust/ChangeLog: * util/rust-lang-item.h: gcc/testsuite/ChangeLog: * rust/compile/issue-1786.rs: New test. Diff: --- gcc/rust/util/rust-lang-item.h | 24 ++++++++++++++++++++++++ gcc/testsuite/rust/compile/issue-1786.rs | 23 +++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/gcc/rust/util/rust-lang-item.h b/gcc/rust/util/rust-lang-item.h index 52f53fa3f93..5bad08ae7c1 100644 --- a/gcc/rust/util/rust-lang-item.h +++ b/gcc/rust/util/rust-lang-item.h @@ -80,6 +80,12 @@ public: FN_ONCE, FN_ONCE_OUTPUT, + // markers + COPY, + CLONE, + SIZED, + + // delimiter UNKNOWN, }; @@ -237,6 +243,18 @@ public: { return ItemType::FN_ONCE_OUTPUT; } + else if (item.compare ("copy") == 0) + { + return ItemType::COPY; + } + else if (item.compare ("clone") == 0) + { + return ItemType::CLONE; + } + else if (item.compare ("sized") == 0) + { + return ItemType::SIZED; + } return ItemType::UNKNOWN; } @@ -321,6 +339,12 @@ public: return "fn_once"; case FN_ONCE_OUTPUT: return "fn_once_output"; + case COPY: + return "copy"; + case CLONE: + return "clone"; + case SIZED: + return "sized"; case UNKNOWN: return ""; diff --git a/gcc/testsuite/rust/compile/issue-1786.rs b/gcc/testsuite/rust/compile/issue-1786.rs new file mode 100644 index 00000000000..f73b63d0cb6 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-1786.rs @@ -0,0 +1,23 @@ +#[lang = "clone"] +trait Clone { + fn clone(&self) -> Self; + + fn clone_from(&mut self, source: &Self) { + *self = source.clone() + } +} + +#[lang = "copy"] +pub trait Copy: Clone { + // Empty. +} + +mod impls { + use super::Clone; + + impl Clone for char { + fn clone(&self) -> Self { + *self + } + } +}