]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Change lookup_visibility's return type
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Sat, 4 May 2024 01:44:35 +0000 (03:44 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Mon, 17 Mar 2025 15:35:27 +0000 (16:35 +0100)
Wrap the return type within an optional.

gcc/rust/ChangeLog:

* checks/errors/privacy/rust-privacy-reporter.cc: Change call site
to accomodate new return type.
* checks/errors/privacy/rust-pub-restricted-visitor.cc: Likewise.
* util/rust-hir-map.cc (Mappings::lookup_visibility): Change the
function's return type.
* util/rust-hir-map.h: Update the function's prototype.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
gcc/rust/checks/errors/privacy/rust-pub-restricted-visitor.cc
gcc/rust/util/rust-hir-map.cc
gcc/rust/util/rust-hir-map.h

index f8df9f795efaaac40a2b356439639891e408e991..d16d6ed454c0162387ea757a6050298109ac815e 100644 (file)
@@ -128,15 +128,15 @@ PrivacyReporter::check_for_privacy_violation (const NodeId &use_id,
   if (ref_node_id == UNKNOWN_NODEID)
     return;
 
-  ModuleVisibility vis;
+  auto vis = mappings.lookup_visibility (ref_node_id);
 
   // FIXME: Can we really return here if the item has no visibility?
-  if (!mappings.lookup_visibility (ref_node_id, vis))
+  if (!vis)
     return;
 
   auto valid = true;
 
-  switch (vis.get_kind ())
+  switch (vis->get_kind ())
     {
     case ModuleVisibility::Public:
       break;
@@ -146,7 +146,7 @@ PrivacyReporter::check_for_privacy_violation (const NodeId &use_id,
        if (!current_module.has_value ())
          return;
 
-       auto module = mappings.lookup_defid (vis.get_module_id ()).value ();
+       auto module = mappings.lookup_defid (vis->get_module_id ()).value ();
 
        auto mod_node_id = module->get_mappings ().get_nodeid ();
 
index bd11f5003d1fccd99538697f9f785a97c3dee4a0..7e6be1a98363e7b94212754aca9da199d0cc396f 100644 (file)
@@ -27,16 +27,16 @@ bool
 PubRestrictedVisitor::is_restriction_valid (NodeId item_id,
                                            const location_t locus)
 {
-  ModuleVisibility visibility;
+  auto visibility = mappings.lookup_visibility (item_id);
 
   // If there is no visibility in the mappings, then the item is private and
   // does not contain any restriction
   // FIXME: Is that correct?
-  if (!mappings.lookup_visibility (item_id, visibility))
+  if (!visibility)
     return true;
 
   for (auto mod = module_stack.rbegin (); mod != module_stack.rend (); mod++)
-    if (*mod == visibility.get_module_id ())
+    if (*mod == visibility->get_module_id ())
       return true;
 
   rust_error_at (locus, "restricted path is not an ancestor of the "
index 3b721198ecc5711fcd2442404953a8357d2f6aec..7418fa4fb0bea0495dc4cb3348606705ccb04c49 100644 (file)
@@ -1102,15 +1102,14 @@ Mappings::insert_visibility (NodeId id, Privacy::ModuleVisibility visibility)
   visibility_map.insert ({id, visibility});
 }
 
-bool
-Mappings::lookup_visibility (NodeId id, Privacy::ModuleVisibility &def)
+tl::optional<Privacy::ModuleVisibility &>
+Mappings::lookup_visibility (NodeId id)
 {
   auto it = visibility_map.find (id);
   if (it == visibility_map.end ())
-    return false;
+    return tl::nullopt;
 
-  def = it->second;
-  return true;
+  return it->second;
 }
 
 void
index d80a15ec00cca952a0f03b8ed3fb0632f51a452f..c70af5bb1bc9ea9a855354a50265ea3e7cc9ce5b 100644 (file)
@@ -326,7 +326,7 @@ public:
                                               AttributeProcMacro def);
 
   void insert_visibility (NodeId id, Privacy::ModuleVisibility visibility);
-  bool lookup_visibility (NodeId id, Privacy::ModuleVisibility &def);
+  tl::optional<Privacy::ModuleVisibility &> lookup_visibility (NodeId id);
 
   void insert_ast_module (AST::Module *);
   tl::optional<AST::Module *> lookup_ast_module (NodeId id);