This code:

      set I0, 0
FOO:  set S0, I0
      savec S0
      inc I0
      lt I0, 256, FOO

      rotate_up 2

      restore S1
      print S1
      print "\n"
      end

 makes Parrot segfault. This seems to be due to an off-by-one error in
 stack_entry(..) that uncovers itself if depth==chunk->used. Enclosed
 patch fixes; test to follow shortly.

 Simon

--- stacks.c.old        Sun Mar 24 17:39:32 2002
+++ stacks.c    Sun Mar 24 17:40:10 2002
@@ -76,7 +76,7 @@
     }
     else {
         chunk = stack_base->prev;    /* Start at top */
-        while (offset > chunk->used && chunk != stack_base) {
+        while (offset >= chunk->used && chunk != stack_base) {
             offset -= chunk->used;
             chunk  = chunk->prev;
         }

Reply via email to