Here is a small patch on top of #23039
- fix memory corruption for very small programs
- fix misplaced #endif

leo
--- interpreter.c       Fri Jul 18 17:53:13 2003
+++ /opt/src/parrot-leo/interpreter.c   Sat Jul 19 11:07:48 2003
@@ -202,13 +202,16 @@
         void **temp = (void **)Parrot_memalign_if_possible(256,
                 N * sizeof(void *));
         size_t branch_list_size = N / 16;      /* estimated size */
-        /* TODO branches per code segment like prederef code */
-        size_t *branches = mem_sys_allocate(branch_list_size * sizeof(size_t));
+        size_t *branches;
         size_t n_branches = 0;
 
         opcode_t *pc = interpreter->code->cur_cs->base.data;
         op_info_t *op_info;
 
+        if (branch_list_size < 8)
+            branch_list_size = 8;
+        /* TODO branches per code segment like prederef code */
+        branches = mem_sys_allocate(branch_list_size * sizeof(size_t));
         interpreter->prederef_code = temp;
         interpreter->prederef_branches = branches;
         interpreter->code->cur_cs->prederef_code = temp;
@@ -223,6 +226,7 @@
             else if (cgp == PREDEREF_FOR_CGP) {
                 *temp = ((void**)(interpreter->op_lib->op_func_table)) [*pc];
             }
+#endif
             op_info = &interpreter->op_info_table[*pc];
             n = op_info->arg_count;
             /* if this is a backward branch, remember its position in
@@ -243,7 +247,6 @@
             pc += n;
             i += n;
             temp += n;
-#endif
         }
         /* mark end of list */
         branches[n_branches] = 0;

Reply via email to