From: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>

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>
---
 gcc/rust/backend/rust-compile-expr.cc                  | 10 ++++++----
 .../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 28b901e69de..e2fa6dda09e 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 869f99c5b80..3a304e881d5 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 78ce17db138..b8d393759d6 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 c2b3e27fd9f..6fd0e7a52f4 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);
-- 
2.45.2

Reply via email to