https://gcc.gnu.org/g:7146c1b6f5edfd7d0b92685d81c81fa1ec40ceab

commit r15-8112-g7146c1b6f5edfd7d0b92685d81c81fa1ec40ceab
Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
Date:   Thu Apr 25 15:14:36 2024 +0200

    gccrs: Change return type of lookup_hir_extern_block
    
    Change the return type to an optional in order to easily differentiate
    between a null pointer and an missing value.
    
    gcc/rust/ChangeLog:
    
            * checks/errors/rust-unsafe-checker.cc 
(UnsafeChecker::check_function_call):
            Adapt function call to new return type.
            * typecheck/rust-type-util.cc (query_type): Likewise.
            * util/rust-hir-map.cc (Mappings::insert_hir_extern_block): 
Likewise.
            (Mappings::lookup_hir_extern_block): Change return type to an 
optional.
            * util/rust-hir-map.h: Update the function's prototype.
    
    Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>

Diff:
---
 gcc/rust/checks/errors/rust-unsafe-checker.cc | 2 +-
 gcc/rust/typecheck/rust-type-util.cc          | 8 ++++----
 gcc/rust/util/rust-hir-map.cc                 | 6 +++---
 gcc/rust/util/rust-hir-map.h                  | 2 +-
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/gcc/rust/checks/errors/rust-unsafe-checker.cc 
b/gcc/rust/checks/errors/rust-unsafe-checker.cc
index 18e79e3ce659..fc83283a795c 100644
--- a/gcc/rust/checks/errors/rust-unsafe-checker.cc
+++ b/gcc/rust/checks/errors/rust-unsafe-checker.cc
@@ -177,7 +177,7 @@ UnsafeChecker::check_function_call (HirId node_id, 
location_t locus)
 
   if (maybe_extern)
     check_extern_call (static_cast<ExternalItem *> (maybe_extern),
-                      mappings.lookup_hir_extern_block (parent_extern_block),
+                      *mappings.lookup_hir_extern_block (parent_extern_block),
                       locus);
 }
 
diff --git a/gcc/rust/typecheck/rust-type-util.cc 
b/gcc/rust/typecheck/rust-type-util.cc
index f6f8c8e9e148..9a777863c2c2 100644
--- a/gcc/rust/typecheck/rust-type-util.cc
+++ b/gcc/rust/typecheck/rust-type-util.cc
@@ -105,11 +105,11 @@ query_type (HirId reference, TyTy::BaseType **result)
     = mappings.lookup_hir_extern_item (reference, &parent_extern_block_id);
   if (extern_item != nullptr)
     {
-      HIR::ExternBlock *block
-       = mappings.lookup_hir_extern_block (parent_extern_block_id);
-      rust_assert (block != nullptr);
+      auto block = mappings.lookup_hir_extern_block (parent_extern_block_id);
+      rust_assert (block.has_value ());
 
-      *result = TypeCheckTopLevelExternItem::Resolve (extern_item, *block);
+      *result
+       = TypeCheckTopLevelExternItem::Resolve (extern_item, *block.value ());
       context->query_completed (reference);
       return true;
     }
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index 0d134bf4ab9f..184ab13494db 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -426,18 +426,18 @@ void
 Mappings::insert_hir_extern_block (HIR::ExternBlock *block)
 {
   auto id = block->get_mappings ().get_hirid ();
-  rust_assert (lookup_hir_extern_block (id) == nullptr);
+  rust_assert (!lookup_hir_extern_block (id).has_value ());
 
   hirExternBlockMappings[id] = block;
   insert_node_to_hir (block->get_mappings ().get_nodeid (), id);
 }
 
-HIR::ExternBlock *
+tl::optional<HIR::ExternBlock *>
 Mappings::lookup_hir_extern_block (HirId id)
 {
   auto it = hirExternBlockMappings.find (id);
   if (it == hirExternBlockMappings.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 5565ef93f1c8..ef4d65639a07 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -124,7 +124,7 @@ public:
   tl::optional<HIR::TraitItem *> lookup_hir_trait_item (HirId id);
 
   void insert_hir_extern_block (HIR::ExternBlock *block);
-  HIR::ExternBlock *lookup_hir_extern_block (HirId id);
+  tl::optional<HIR::ExternBlock *> lookup_hir_extern_block (HirId id);
 
   void insert_hir_extern_item (HIR::ExternalItem *item, HirId parent_block);
   HIR::ExternalItem *lookup_hir_extern_item (HirId id, HirId *parent_block);

Reply via email to