https://gcc.gnu.org/g:65f283df777fd05b5e45d054e457b271d12ec2dc

commit 65f283df777fd05b5e45d054e457b271d12ec2dc
Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
Date:   Tue Mar 26 16:32:31 2024 +0100

    Change dfs function return type to support gcc 4.8
    
    GCC 4.8 does not handle pair with references correctly. We need to use a
    properly typed struct instead.
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-forever-stack.h: Change dfs function prototype and
            declare dfs return type structure.
            * resolve/rust-forever-stack.hxx: Adapt dfs function to the new 
return
            type.
    
    Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>

Diff:
---
 gcc/rust/resolve/rust-forever-stack.h   | 8 ++++++--
 gcc/rust/resolve/rust-forever-stack.hxx | 4 ++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/gcc/rust/resolve/rust-forever-stack.h 
b/gcc/rust/resolve/rust-forever-stack.h
index 3dab45e7e779..72b96bff3b3f 100644
--- a/gcc/rust/resolve/rust-forever-stack.h
+++ b/gcc/rust/resolve/rust-forever-stack.h
@@ -596,10 +596,14 @@ private:
                                         SegIterator<S> iterator);
 
   /* Helper functions for forward resolution (to_canonical_path, to_rib...) */
+  struct DfsResult
+  {
+    Node &first;
+    std::string second;
+  };
 
   // FIXME: Documentation
-  tl::optional<std::pair<Node &, std::string>> dfs (Node &starting_point,
-                                                   NodeId to_find);
+  tl::optional<DfsResult> dfs (Node &starting_point, NodeId to_find);
   // FIXME: Documentation
   tl::optional<Rib &> dfs_rib (Node &starting_point, NodeId to_find);
 };
diff --git a/gcc/rust/resolve/rust-forever-stack.hxx 
b/gcc/rust/resolve/rust-forever-stack.hxx
index 6b622b8aef1e..2c3cba594484 100644
--- a/gcc/rust/resolve/rust-forever-stack.hxx
+++ b/gcc/rust/resolve/rust-forever-stack.hxx
@@ -468,7 +468,7 @@ ForeverStack<N>::resolve_path (const std::vector<S> 
&segments)
 }
 
 template <Namespace N>
-tl::optional<std::pair<typename ForeverStack<N>::Node &, std::string>>
+tl::optional<typename ForeverStack<N>::DfsResult>
 ForeverStack<N>::dfs (ForeverStack<N>::Node &starting_point, NodeId to_find)
 {
   auto values = starting_point.rib.get_values ();
@@ -498,7 +498,7 @@ ForeverStack<N>::to_canonical_path (NodeId id)
   // back up to the root (parent().parent().parent()...) accumulate link
   // segments reverse them that's your canonical path
 
-  return dfs (root, id).map ([this, id] (std::pair<Node &, std::string> tuple) 
{
+  return dfs (root, id).map ([this, id] (DfsResult tuple) {
     auto containing_node = tuple.first;
     auto name = tuple.second;

Reply via email to