]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: marklive: Fix handling for lang item PathInExpressions.
authorArthur Cohen <arthur.cohen@embecosm.com>
Tue, 24 Dec 2024 11:45:25 +0000 (11:45 +0000)
committerArthur Cohen <arthur.cohen@embecosm.com>
Mon, 24 Mar 2025 12:06:55 +0000 (13:06 +0100)
gcc/rust/ChangeLog:

* checks/lints/rust-lint-marklive.cc (MarkLive::visit): Adapt to lang items.

gcc/rust/checks/lints/rust-lint-marklive.cc

index 4b524d710c95a6e98a3517d871128d2cc3146592..6e2e2e4e4477b5df607ad778bc7b54174285e632 100644 (file)
@@ -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);