From: Owen Avery <[email protected]>
gcc/rust/ChangeLog:
* resolve/rust-forever-stack.hxx
(ForeverStack::resolve_segments): Add comments explaining
the behaviour of a while loop.
Signed-off-by: Owen Avery <[email protected]>
---
gcc/rust/resolve/rust-forever-stack.hxx | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/gcc/rust/resolve/rust-forever-stack.hxx
b/gcc/rust/resolve/rust-forever-stack.hxx
index d2020554f74..8abe8a61acb 100644
--- a/gcc/rust/resolve/rust-forever-stack.hxx
+++ b/gcc/rust/resolve/rust-forever-stack.hxx
@@ -464,8 +464,17 @@ ForeverStack<N>::resolve_segments (
tl::optional<typename ForeverStack<N>::Node &> child = tl::nullopt;
+ /*
+ * On every iteration this loop either
+ *
+ * 1. terminates
+ * 2. decreases the depth of the node pointed to by current_node
+ *
+ * This ensures termination
+ */
while (true)
{
+ // may set the value of child
for (auto &kv : current_node->children)
{
auto &link = kv.first;
@@ -508,6 +517,8 @@ ForeverStack<N>::resolve_segments (
current_node = ¤t_node->parent.value ();
}
+ // if child didn't contain a value
+ // the while loop above should have return'd or kept looping
current_node = &child.value ();
insert_segment_resolution (outer_seg, current_node->id);
}
--
2.45.2