From: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com> Wrap the function's return type with an optional in order to differentiate missing values from null pointers.
gcc/rust/ChangeLog: * backend/rust-mangle-v0.cc (v0_path): Adapt call site to new returned type. * util/rust-hir-map.cc (Mappings::lookup_hir_expr): Change the function's return type. * util/rust-hir-map.h: Update the function's prototype. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com> --- gcc/rust/backend/rust-mangle-v0.cc | 6 ++---- gcc/rust/util/rust-hir-map.cc | 4 ++-- gcc/rust/util/rust-hir-map.h | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/gcc/rust/backend/rust-mangle-v0.cc b/gcc/rust/backend/rust-mangle-v0.cc index 261e84405d5..d604dcf725c 100644 --- a/gcc/rust/backend/rust-mangle-v0.cc +++ b/gcc/rust/backend/rust-mangle-v0.cc @@ -384,8 +384,6 @@ v0_path (Rust::Compile::Context *ctx, const TyTy::BaseType *ty, auto hir_id = hid.value (); - HIR::Expr *expr = mappings.lookup_hir_expr (hir_id); - if (auto impl_item = mappings.lookup_hir_implitem (hir_id)) { switch (impl_item->first->get_impl_item_type ()) @@ -467,9 +465,9 @@ v0_path (Rust::Compile::Context *ctx, const TyTy::BaseType *ty, cpath.get ().c_str ()); break; } - else if (expr != nullptr) + else if (auto expr = mappings.lookup_hir_expr (hir_id)) { - rust_assert (expr->get_expression_type () + rust_assert (expr.value ()->get_expression_type () == HIR::Expr::ExprType::Closure); // Use HIR ID as disambiguator. v0path = v0_closure (v0path, hir_id); diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index 89c990d965f..80786490f82 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -536,12 +536,12 @@ Mappings::insert_hir_expr (HIR::Expr *expr) insert_location (id, expr->get_locus ()); } -HIR::Expr * +tl::optional<HIR::Expr *> Mappings::lookup_hir_expr (HirId id) { auto it = hirExprMappings.find (id); if (it == hirExprMappings.end ()) - return nullptr; + return tl::nullopt; return it->second; } diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h index a587ccca753..8d0f652a3d3 100644 --- a/gcc/rust/util/rust-hir-map.h +++ b/gcc/rust/util/rust-hir-map.h @@ -146,7 +146,7 @@ public: lookup_hir_implitem (HirId id); void insert_hir_expr (HIR::Expr *expr); - HIR::Expr *lookup_hir_expr (HirId id); + tl::optional<HIR::Expr *> lookup_hir_expr (HirId id); void insert_hir_path_expr_seg (HIR::PathExprSegment *expr); HIR::PathExprSegment *lookup_hir_path_expr_seg (HirId id); -- 2.45.2