https://gcc.gnu.org/g:402d329819bebd43918aaa68adb698fb4989f987

commit 402d329819bebd43918aaa68adb698fb4989f987
Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
Date:   Wed Apr 24 22:32:54 2024 +0200

    Change lookup_hir_to_node return type to optional
    
    Optional are more convenient to use and avoid uninitialized data.
    
    gcc/rust/ChangeLog:
    
            * backend/rust-compile-expr.cc 
(CompileExpr::generate_closure_function):
            Adapt code for new optional return type.
            * checks/errors/privacy/rust-privacy-reporter.cc 
(PrivacyReporter::check_base_type_privacy):
            Likewise.
            * util/rust-hir-map.cc (Mappings::lookup_hir_to_node): Change return
            type to an optional.
            * util/rust-hir-map.h: Adapt function prototype with the new return
            type.
    
    Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>

Diff:
---
 gcc/rust/backend/rust-compile-expr.cc                   | 10 ++++++----
 gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc |  9 +++------
 gcc/rust/util/rust-hir-map.cc                           |  9 ++++-----
 gcc/rust/util/rust-hir-map.h                            |  2 +-
 4 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/gcc/rust/backend/rust-compile-expr.cc 
b/gcc/rust/backend/rust-compile-expr.cc
index 3cf37ded3db1..557b9fe59c58 100644
--- a/gcc/rust/backend/rust-compile-expr.cc
+++ b/gcc/rust/backend/rust-compile-expr.cc
@@ -2216,10 +2216,12 @@ CompileExpr::generate_closure_function 
(HIR::ClosureExpr &expr,
 
   const Resolver::CanonicalPath &parent_canonical_path
     = closure_tyty.get_ident ().path;
-  NodeId node_id;
-  bool ok = ctx->get_mappings ().lookup_hir_to_node (
-    expr.get_mappings ().get_hirid (), &node_id);
-  rust_assert (ok);
+
+  tl::optional<NodeId> nid = ctx->get_mappings ().lookup_hir_to_node (
+    expr.get_mappings ().get_hirid ());
+  rust_assert (nid.has_value ());
+  auto node_id = nid.value ();
+
   Resolver::CanonicalPath path = parent_canonical_path.append (
     Resolver::CanonicalPath::new_seg (node_id, "{{closure}}"));
 
diff --git a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc 
b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
index a4e18cc90020..1ce47fda1a9c 100644
--- a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
+++ b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
@@ -201,12 +201,9 @@ PrivacyReporter::check_base_type_privacy 
(Analysis::NodeMapping &node_mappings,
     case TyTy::ADT:
       case TyTy::STR: {
        auto ref_id = ty->get_ref ();
-       NodeId lookup_id;
-
-       bool ok = mappings.lookup_hir_to_node (ref_id, &lookup_id);
-       rust_assert (ok);
-
-       return check_for_privacy_violation (lookup_id, locus);
+       if (auto lookup_id = mappings.lookup_hir_to_node (ref_id))
+         return check_for_privacy_violation (*lookup_id, locus);
+       rust_unreachable ();
       }
     case TyTy::REF:
       return recursive_check (
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index 29fd4cf6bfd8..06f3e7ab7a0c 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -779,15 +779,14 @@ Mappings::lookup_node_to_hir (NodeId id)
   return {it->second};
 }
 
-bool
-Mappings::lookup_hir_to_node (HirId id, NodeId *ref)
+tl::optional<NodeId>
+Mappings::lookup_hir_to_node (HirId id)
 {
   auto it = hirIdToNodeMappings.find (id);
   if (it == hirIdToNodeMappings.end ())
-    return false;
+    return tl::nullopt;
 
-  *ref = it->second;
-  return true;
+  return {it->second};
 }
 
 void
diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h
index 85bcfdeeda1d..753b2e0eeaf1 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -171,7 +171,7 @@ public:
 
   void insert_node_to_hir (NodeId id, HirId ref);
   tl::optional<HirId> lookup_node_to_hir (NodeId id);
-  bool lookup_hir_to_node (HirId id, NodeId *ref);
+  tl::optional<NodeId> lookup_hir_to_node (HirId id);
 
   void insert_location (HirId id, location_t locus);
   location_t lookup_location (HirId id);

Reply via email to