https://gcc.gnu.org/g:8c5be0dd1c460694a2c8ef78bdadc2c6aea01ad8
commit r15-8116-g8c5be0dd1c460694a2c8ef78bdadc2c6aea01ad8 Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com> Date: Thu Apr 25 16:15:42 2024 +0200 gccrs: Change crate_num_to_nodeid return type Change the function's return type to an optional. gcc/rust/ChangeLog: * resolve/rust-ast-resolve-toplevel.h: Adapt the code to the new return type. * rust-session-manager.cc (Session::load_extern_crate): Likewise. * util/rust-hir-map.cc (Mappings::crate_num_to_nodeid): Change the return type. * util/rust-hir-map.h: Update the function's prototype. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com> Diff: --- gcc/rust/resolve/rust-ast-resolve-toplevel.h | 11 ++++------- gcc/rust/rust-session-manager.cc | 8 +++----- gcc/rust/util/rust-hir-map.cc | 9 ++++----- gcc/rust/util/rust-hir-map.h | 2 +- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/gcc/rust/resolve/rust-ast-resolve-toplevel.h b/gcc/rust/resolve/rust-ast-resolve-toplevel.h index 99fc4f6bfcc8..565ca922e84d 100644 --- a/gcc/rust/resolve/rust-ast-resolve-toplevel.h +++ b/gcc/rust/resolve/rust-ast-resolve-toplevel.h @@ -429,8 +429,7 @@ public: if (extern_crate.references_self ()) { CrateNum crate_num = mappings.get_current_crate (); - bool ok = mappings.crate_num_to_nodeid (crate_num, resolved_crate); - rust_assert (ok); + resolved_crate = mappings.crate_num_to_nodeid (crate_num).value (); } else { @@ -442,11 +441,9 @@ public: extern_crate.get_referenced_crate ().c_str ()); return; } - auto found_crate_num = cnum.value (); - - bool ok - = mappings.crate_num_to_nodeid (found_crate_num, resolved_crate); - if (!ok) + if (auto resolved = mappings.crate_num_to_nodeid (*cnum)) + resolved_crate = resolved.value (); + else { rust_internal_error_at (extern_crate.get_locus (), "failed to resolve crate to nodeid"); diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc index da66479d608c..61a76d69a6b8 100644 --- a/gcc/rust/rust-session-manager.cc +++ b/gcc/rust/rust-session-manager.cc @@ -1050,12 +1050,10 @@ Session::load_extern_crate (const std::string &crate_name, location_t locus) // has it already been loaded? if (auto crate_num = mappings.lookup_crate_name (crate_name)) { - NodeId resolved_node_id = UNKNOWN_NODEID; - bool resolved - = mappings.crate_num_to_nodeid (*crate_num, resolved_node_id); - rust_assert (resolved); + auto resolved_node_id = mappings.crate_num_to_nodeid (*crate_num); + rust_assert (resolved_node_id); - return resolved_node_id; + return *resolved_node_id; } std::string relative_import_path = ""; diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index 95d3b3a4d611..76642a1b1320 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -175,15 +175,14 @@ Mappings::lookup_crate_name (const std::string &crate_name) const return tl::nullopt; } -bool -Mappings::crate_num_to_nodeid (const CrateNum &crate_num, NodeId &node_id) const +tl::optional<NodeId> +Mappings::crate_num_to_nodeid (const CrateNum &crate_num) const { auto it = ast_crate_mappings.find (crate_num); if (it == ast_crate_mappings.end ()) - return false; + return tl::nullopt; - node_id = it->second->get_node_id (); - return true; + return it->second->get_node_id (); } bool diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h index a68d81f34efe..8181abe00a98 100644 --- a/gcc/rust/util/rust-hir-map.h +++ b/gcc/rust/util/rust-hir-map.h @@ -85,7 +85,7 @@ public: std::string get_current_crate_name () const; tl::optional<CrateNum> lookup_crate_name (const std::string &crate_name) const; - bool crate_num_to_nodeid (const CrateNum &crate_num, NodeId &node_id) const; + tl::optional<NodeId> crate_num_to_nodeid (const CrateNum &crate_num) const; bool node_is_crate (NodeId node_id) const; NodeId get_next_node_id ();