From 65f283df777fd05b5e45d054e457b271d12ec2dc Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Tue, 26 Mar 2024 16:32:31 +0100 Subject: [PATCH] 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 --- 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 @@ template class ForeverStack SegIterator iterator); /* Helper functions for forward resolution (to_canonical_path, to_rib...) */ + struct DfsResult + { + Node &first; + std::string second; + }; // FIXME: Documentation - tl::optional> dfs (Node &starting_point, - NodeId to_find); + tl::optional dfs (Node &starting_point, NodeId to_find); // FIXME: Documentation tl::optional 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::resolve_path (const std::vector &segments) } template -tl::optional::Node &, std::string>> +tl::optional::DfsResult> ForeverStack::dfs (ForeverStack::Node &starting_point, NodeId to_find) { auto values = starting_point.rib.get_values (); @@ -498,7 +498,7 @@ ForeverStack::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 tuple) { + return dfs (root, id).map ([this, id] (DfsResult tuple) { auto containing_node = tuple.first; auto name = tuple.second;