]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
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)
committerP-E-P <32375388+P-E-P@users.noreply.github.com>
Fri, 17 May 2024 15:28:30 +0000 (15:28 +0000)
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 c1e217d5998796f14c19cad616a8690d07c5160c..d2e448c41f4fcb3849f593db7125d27dea117a6a 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 907479071b74d569e0d045427fad73c986bab338..7b26a953bdee0ed763891dee54c8e97f06e07158 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 f7975fa9537a4e4ee2b61f93a5ae7b5d009c708b..26d24ee631f50be13380e96dcf6d2a33b20afaf3 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 34500474dc5321b112063c63e52bdbe3004cdbcc..cc170dca4f3936146e2bf5e1841682e5673ffbee 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);