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