From: Ryutaro Okada <1015ryu88@gmail.com> Date: Fri, 8 Aug 2025 15:02:19 +0000 (-0700) Subject: gccrs: Add derived set to collect derived nodes. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7c5849ebd4b2c851cb10c4e51002e245cef69fa4;p=thirdparty%2Fgcc.git gccrs: Add derived set to collect derived nodes. gcc/rust/ChangeLog: * expand/rust-expand-visitor.cc (builtin_derive_item): Collect derived nodes. (derive_item): Collect derived nodes. * util/rust-hir-map.cc (Mappings::add_derived_nodes): Add derived set to collect derived nodes. (Mappings::is_derived_node): Add derived set to collect derived nodes. * util/rust-hir-map.h: Add derived set to collect derived nodes. Signed-off-by: Ryutaro Okada <1015ryu88@gmail.com> --- diff --git a/gcc/rust/expand/rust-expand-visitor.cc b/gcc/rust/expand/rust-expand-visitor.cc index 4593cc3f930..6e98a5c3724 100644 --- a/gcc/rust/expand/rust-expand-visitor.cc +++ b/gcc/rust/expand/rust-expand-visitor.cc @@ -18,6 +18,7 @@ #include "rust-expand-visitor.h" #include "rust-ast-fragment.h" +#include "rust-hir-map.h" #include "rust-item.h" #include "rust-proc-macro.h" #include "rust-attributes.h" @@ -48,7 +49,10 @@ static std::vector> builtin_derive_item (AST::Item &item, const AST::Attribute &derive, BuiltinMacro to_derive) { - return AST::DeriveVisitor::derive (item, derive, to_derive); + auto items = AST::DeriveVisitor::derive (item, derive, to_derive); + for (auto &item : items) + Analysis::Mappings::get ().add_derived_node (item->get_node_id ()); + return items; } static std::vector> @@ -64,6 +68,8 @@ derive_item (AST::Item &item, AST::SimplePath &to_derive, switch (node.get_kind ()) { case AST::SingleASTNode::Kind::Item: + Analysis::Mappings::get ().add_derived_node ( + node.get_item ()->get_node_id ()); result.push_back (node.take_item ()); break; default: diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index 1587c7ee7a2..a6d323e3614 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -1358,5 +1358,17 @@ Mappings::lookup_captures (NodeId closure) return cap->second; } +void +Mappings::add_derived_node (NodeId node_id) +{ + derived_nodes.insert (node_id); +} + +bool +Mappings::is_derived_node (NodeId node_id) +{ + return derived_nodes.find (node_id) != derived_nodes.end (); +} + } // namespace Analysis } // namespace Rust diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h index 8a284cb938b..60066d6cdd0 100644 --- a/gcc/rust/util/rust-hir-map.h +++ b/gcc/rust/util/rust-hir-map.h @@ -350,6 +350,9 @@ public: void add_capture (NodeId closure, NodeId definition); tl::optional> lookup_captures (NodeId closure); + void add_derived_node (NodeId node_id); + bool is_derived_node (NodeId node_id); + private: Mappings (); @@ -443,6 +446,8 @@ private: // Closure AST NodeId -> vector of Definition node ids std::unordered_map> captures; + + std::set derived_nodes; }; } // namespace Analysis