diff options
author | Philip Herron <herron.philip@googlemail.com> | 2024-09-19 16:45:54 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2024-09-27 10:01:40 +0000 |
commit | c6a479fb9312b9166ca94a588aa85c9172f5ae19 (patch) | |
tree | 966cb6a96a6a09412811aff1c582075bc94c5b88 /gcc/input.h | |
parent | 423122c2f082da15d8546f3d4beeb5b2b7da4446 (diff) | |
download | gcc-c6a479fb9312b9166ca94a588aa85c9172f5ae19.zip gcc-c6a479fb9312b9166ca94a588aa85c9172f5ae19.tar.gz gcc-c6a479fb9312b9166ca94a588aa85c9172f5ae19.tar.bz2 |
rust: Add support for Clone and Copy derive on generic types
When we generate derivations for Copy and Clone we need to make sure
the associated impl block sets up the generic parameters and arguments
correctly. This patch introduces the framework to copy chunks of the AST
because we need to make sure these new AST nodes have their own associated
id, calling clone on the nodes will just confuse name-resolution and
subsequent mappings.
Fixes #3139
gcc/rust/ChangeLog:
* Make-lang.in: new objects
* ast/rust-ast-builder.cc (Builder::generic_type_path_segment): new helper
(Builder::single_generic_type_path): likewise
(Builder::new_type): likewise
(Builder::new_lifetime_param): likewise
(Builder::new_type_param): likewise
(Builder::new_lifetime): likewise
(Builder::new_generic_args): likewise
* ast/rust-ast-builder.h: new helper decls
* ast/rust-ast.h: new const getters
* ast/rust-path.h: likewise
* ast/rust-type.h: likewise
* expand/rust-derive-clone.cc (DeriveClone::clone_impl): take the types generics
(DeriveClone::visit_tuple): likewise
(DeriveClone::visit_struct): likewise
(DeriveClone::visit_union): likewise
* expand/rust-derive-clone.h: update header
* expand/rust-derive-copy.cc (DeriveCopy::copy_impl): similarly take type generics
(DeriveCopy::visit_struct): likewise
(DeriveCopy::visit_tuple): likewise
(DeriveCopy::visit_enum): likewise
(DeriveCopy::visit_union): likewise
* expand/rust-derive-copy.h: likewse
* ast/rust-ast-builder-type.cc: New file.
* ast/rust-ast-builder-type.h: New file.
gcc/testsuite/ChangeLog:
* rust/compile/issue-3139-1.rs: New test.
* rust/compile/issue-3139-2.rs: New test.
* rust/compile/issue-3139-3.rs: New test.
* rust/compile/nr2/exclude: these all break nr2
Diffstat (limited to 'gcc/input.h')
0 files changed, 0 insertions, 0 deletions