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

Wrap the return type with an optional.

gcc/rust/ChangeLog:

        * backend/rust-compile-base.cc (HIRCompileBase::resolve_method_address):
        Update code around lookup return type.
        * typecheck/rust-tyty-bounds.cc 
(TypeCheckBase::get_predicate_from_bound):
        Likewise.
        * typecheck/rust-tyty.cc (ClosureType::setup_fn_once_output):
        Likewise.
        * util/rust-hir-map.cc (Mappings::insert_defid_mapping): Likewise.
        (Mappings::lookup_trait_item_defid): Update return type with an
        optional.
        (Mappings::get_lang_item): Likewise.
        * util/rust-hir-map.h: Update the functions prototype.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
---
 gcc/rust/backend/rust-compile-base.cc  |  2 +-
 gcc/rust/typecheck/rust-tyty-bounds.cc |  7 +++++--
 gcc/rust/typecheck/rust-tyty.cc        |  4 ++--
 gcc/rust/util/rust-hir-map.cc          | 10 +++++-----
 gcc/rust/util/rust-hir-map.h           |  6 +++---
 5 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/gcc/rust/backend/rust-compile-base.cc 
b/gcc/rust/backend/rust-compile-base.cc
index c7031edd30b..add173c50a9 100644
--- a/gcc/rust/backend/rust-compile-base.cc
+++ b/gcc/rust/backend/rust-compile-base.cc
@@ -887,7 +887,7 @@ HIRCompileBase::resolve_method_address (TyTy::FnType 
*fntype,
 
   // it might be resolved to a trait item
   HIR::TraitItem *trait_item
-    = ctx->get_mappings ().lookup_trait_item_defid (id);
+    = ctx->get_mappings ().lookup_trait_item_defid (id).value ();
   HIR::Trait *trait = ctx->get_mappings ().lookup_trait_item_mapping (
     trait_item->get_mappings ().get_hirid ());
 
diff --git a/gcc/rust/typecheck/rust-tyty-bounds.cc 
b/gcc/rust/typecheck/rust-tyty-bounds.cc
index a18a0e40ddf..43404385cdd 100644
--- a/gcc/rust/typecheck/rust-tyty-bounds.cc
+++ b/gcc/rust/typecheck/rust-tyty-bounds.cc
@@ -245,8 +245,11 @@ TypeCheckBase::get_predicate_from_bound (HIR::TypePath 
&type_path,
        rust_assert (fn.has_return_type ());
        TypeCheckType::Resolve (fn.get_return_type ().get ());
 
-       HIR::TraitItem *trait_item = mappings.lookup_trait_item_lang_item (
-         LangItem::Kind::FN_ONCE_OUTPUT, final_seg->get_locus ());
+       HIR::TraitItem *trait_item
+         = mappings
+             .lookup_trait_item_lang_item (LangItem::Kind::FN_ONCE_OUTPUT,
+                                           final_seg->get_locus ())
+             .value ();
 
        std::vector<HIR::GenericArgsBinding> bindings;
        location_t output_locus = fn.get_return_type ()->get_locus ();
diff --git a/gcc/rust/typecheck/rust-tyty.cc b/gcc/rust/typecheck/rust-tyty.cc
index 2e9a551e4c7..565f2bc58aa 100644
--- a/gcc/rust/typecheck/rust-tyty.cc
+++ b/gcc/rust/typecheck/rust-tyty.cc
@@ -2238,8 +2238,8 @@ ClosureType::setup_fn_once_output () const
   rust_assert (!trait_ref->is_error ());
 
   // resolve to trait item
-  HIR::TraitItem *trait_item = mappings.lookup_trait_item_defid 
(trait_item_id);
-  rust_assert (trait_item != nullptr);
+  HIR::TraitItem *trait_item
+    = mappings.lookup_trait_item_defid (trait_item_id).value ();
   rust_assert (trait_item->get_item_kind ()
               == HIR::TraitItem::TraitItemKind::TYPE);
   std::string item_identifier = trait_item->trait_identifier ();
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index dcedea97e09..41e4b048eb5 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -314,7 +314,7 @@ Mappings::insert_defid_mapping (DefId id, HIR::Item *item)
 
   rust_assert (!lookup_defid (id));
   rust_assert (!lookup_local_defid (crate_num, local_def_id));
-  rust_assert (lookup_trait_item_defid (id) == nullptr);
+  rust_assert (!lookup_trait_item_defid (id));
 
   defIdMappings[id] = item;
   insert_local_defid_mapping (crate_num, local_def_id, item);
@@ -338,17 +338,17 @@ Mappings::insert_defid_mapping (DefId id, HIR::TraitItem 
*item)
 
   rust_assert (!lookup_defid (id));
   rust_assert (!lookup_local_defid (crate_num, local_def_id));
-  rust_assert (lookup_trait_item_defid (id) == nullptr);
+  rust_assert (!lookup_trait_item_defid (id));
 
   defIdTraitItemMappings[id] = item;
 }
 
-HIR::TraitItem *
+tl::optional<HIR::TraitItem *>
 Mappings::lookup_trait_item_defid (DefId id)
 {
   auto it = defIdTraitItemMappings.find (id);
   if (it == defIdTraitItemMappings.end ())
-    return nullptr;
+    return tl::nullopt;
 
   return it->second;
 }
@@ -1264,7 +1264,7 @@ Mappings::get_lang_item (LangItem::Kind item_type, 
location_t locus)
   return item;
 }
 
-HIR::TraitItem *
+tl::optional<HIR::TraitItem *>
 Mappings::lookup_trait_item_lang_item (LangItem::Kind item, location_t locus)
 {
   DefId trait_item_id = get_lang_item (item, locus);
diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h
index b4c39a94e82..ff0da5556a7 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -108,7 +108,7 @@ public:
   void insert_defid_mapping (DefId id, HIR::Item *item);
   tl::optional<HIR::Item *> lookup_defid (DefId id);
   void insert_defid_mapping (DefId id, HIR::TraitItem *item);
-  HIR::TraitItem *lookup_trait_item_defid (DefId id);
+  tl::optional<HIR::TraitItem *> lookup_trait_item_defid (DefId id);
 
   void insert_local_defid_mapping (CrateNum crateNum, LocalDefId id,
                                   HIR::Item *item);
@@ -350,8 +350,8 @@ public:
 
   HIR::ImplBlock *lookup_builtin_marker ();
 
-  HIR::TraitItem *lookup_trait_item_lang_item (LangItem::Kind item,
-                                              location_t locus);
+  tl::optional<HIR::TraitItem *>
+  lookup_trait_item_lang_item (LangItem::Kind item, location_t locus);
 
 private:
   Mappings ();
-- 
2.45.2

Reply via email to