]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Fix ForeverStack::find_starting_point output parameter
authorOwen Avery <powerboat9.gamer@gmail.com>
Mon, 11 Nov 2024 21:04:58 +0000 (16:04 -0500)
committerArthur Cohen <arthur.cohen@embecosm.com>
Fri, 21 Mar 2025 11:33:11 +0000 (12:33 +0100)
gcc/rust/ChangeLog:

* resolve/rust-forever-stack.h
(ForeverStack::find_starting_point): Use type
'std::reference_wrapper<Node> &' instead of 'Node &' for
parameter starting_point.
* resolve/rust-forever-stack.hxx
(ForeverStack::find_starting_point): Likewise.
(ForeverStack::resolve_path): Handle change to
ForeverStack::find_starting_point.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
gcc/rust/resolve/rust-forever-stack.h
gcc/rust/resolve/rust-forever-stack.hxx

index c548eeae087940aa20dd2e2a6bf83e1882ab9c67..064d1ab2bb3a01cf662dd140a8d82f381b876806 100644 (file)
@@ -614,7 +614,8 @@ private:
 
   template <typename S>
   tl::optional<SegIterator<S>>
-  find_starting_point (const std::vector<S> &segments, Node &starting_point);
+  find_starting_point (const std::vector<S> &segments,
+                      std::reference_wrapper<Node> &starting_point);
 
   template <typename S>
   tl::optional<Node &> resolve_segments (Node &starting_point,
index 58164a4d3285f0e4b83bacc24b287eeddb47d27e..d3d78894671af1fc8de2cd6957023e766fe610cc 100644 (file)
@@ -374,8 +374,8 @@ check_leading_kw_at_start (const S &segment, bool condition)
 template <Namespace N>
 template <typename S>
 tl::optional<typename std::vector<S>::const_iterator>
-ForeverStack<N>::find_starting_point (const std::vector<S> &segments,
-                                     Node &starting_point)
+ForeverStack<N>::find_starting_point (
+  const std::vector<S> &segments, std::reference_wrapper<Node> &starting_point)
 {
   auto iterator = segments.begin ();
 
@@ -412,14 +412,15 @@ ForeverStack<N>::find_starting_point (const std::vector<S> &segments,
        }
       if (seg.is_super_path_seg ())
        {
-         if (starting_point.is_root ())
+         if (starting_point.get ().is_root ())
            {
              rust_error_at (seg.get_locus (), ErrorCode::E0433,
                             "too many leading %<super%> keywords");
              return tl::nullopt;
            }
 
-         starting_point = find_closest_module (starting_point.parent.value ());
+         starting_point
+           = find_closest_module (starting_point.get ().parent.value ());
          continue;
        }
 
@@ -494,12 +495,12 @@ ForeverStack<N>::resolve_path (const std::vector<S> &segments)
   if (segments.size () == 1)
     return get (segments.back ().as_string ());
 
-  auto starting_point = cursor ();
+  std::reference_wrapper<Node> starting_point = cursor ();
 
   return find_starting_point (segments, starting_point)
     .and_then ([this, &segments, &starting_point] (
                 typename std::vector<S>::const_iterator iterator) {
-      return resolve_segments (starting_point, segments, iterator);
+      return resolve_segments (starting_point.get (), segments, iterator);
     })
     .and_then ([&segments] (Node final_node) {
       return final_node.rib.get (segments.back ().as_string ());