diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-12-24 11:45:25 +0000 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2025-01-28 17:35:37 +0000 |
commit | df15601da56accee5d77ecc0dc60cde4fcd9c8a7 (patch) | |
tree | 6e5f673af0f6caa54b7007c63fc62d9fc493e36d /gcc/rust | |
parent | a7d273ca770382b941453a00f579abdf3e606f4a (diff) | |
download | gcc-df15601da56accee5d77ecc0dc60cde4fcd9c8a7.zip gcc-df15601da56accee5d77ecc0dc60cde4fcd9c8a7.tar.gz gcc-df15601da56accee5d77ecc0dc60cde4fcd9c8a7.tar.bz2 |
marklive: Fix handling for lang item PathInExpressions.
gcc/rust/ChangeLog:
* checks/lints/rust-lint-marklive.cc (MarkLive::visit): Adapt to lang items.
Diffstat (limited to 'gcc/rust')
-rw-r--r-- | gcc/rust/checks/lints/rust-lint-marklive.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/gcc/rust/checks/lints/rust-lint-marklive.cc b/gcc/rust/checks/lints/rust-lint-marklive.cc index 91550c7..aacfc08 100644 --- a/gcc/rust/checks/lints/rust-lint-marklive.cc +++ b/gcc/rust/checks/lints/rust-lint-marklive.cc @@ -22,6 +22,8 @@ #include "rust-lint-marklive.h" #include "options.h" #include "rust-hir-full.h" +#include "rust-hir-map.h" +#include "rust-hir-path.h" #include "rust-name-resolver.h" #include "rust-immutable-name-resolution-context.h" #include "rust-system.h" @@ -99,15 +101,21 @@ MarkLive::visit (HIR::PathInExpression &expr) { // We should iterate every path segment in order to mark the struct which // is used in expression like Foo::bar(), we should mark the Foo alive. - expr.iterate_path_segments ([&] (HIR::PathExprSegment &seg) -> bool { - return visit_path_segment (seg); - }); + if (!expr.is_lang_item ()) + expr.iterate_path_segments ([&] (HIR::PathExprSegment &seg) -> bool { + return visit_path_segment (seg); + }); // after iterate the path segments, we should mark functions and associated // functions alive. NodeId ast_node_id = expr.get_mappings ().get_nodeid (); NodeId ref_node_id = UNKNOWN_NODEID; - find_ref_node_id (ast_node_id, ref_node_id); + + if (expr.is_lang_item ()) + ref_node_id + = Analysis::Mappings::get ().get_lang_item_node (expr.get_lang_item ()); + else + find_ref_node_id (ast_node_id, ref_node_id); // node back to HIR tl::optional<HirId> hid = mappings.lookup_node_to_hir (ref_node_id); |