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