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;