https://gcc.gnu.org/g:8dc95df84e3473fe699e957f8a69827fc841541a

commit 8dc95df84e3473fe699e957f8a69827fc841541a
Author: Owen Avery <powerboat9.ga...@gmail.com>
Date:   Mon Feb 17 18:33:08 2025 -0500

    Add comments to resolve_segments
    
    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 <powerboat9.ga...@gmail.com>

Diff:
---
 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 39c623ccb066..5dd341397ef4 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 = &current_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);
     }

Reply via email to