diff --git a/src/peep.c b/src/peep.c index fe70d6329ac662d54340a2cbc7a25ee2bc08bf1a..3bc7a8c95412791f4a8c8acc40ed9aacd9776ba6 100644 --- a/src/peep.c +++ b/src/peep.c @@ -157,7 +157,6 @@ void assemble(void) max_label = c->arg; - labels=(INT32 *)xalloc(sizeof(INT32) * (max_label+1)); jumps=(INT32 *)xalloc(sizeof(INT32) * (max_label+1)); uses=(INT32 *)xalloc(sizeof(INT32) * (max_label+1)); @@ -182,9 +181,12 @@ void assemble(void) int tmp,tmp2; tmp=labels[c[e].arg]; - while(c[tmp].opcode == F_LABEL || - c[tmp].opcode == F_NOP) tmp++; + while(tmp<length && + (c[tmp].opcode == F_LABEL || + c[tmp].opcode == F_NOP)) tmp++; + if(tmp>=length) break; + if(c[tmp].opcode==F_BRANCH) { c[e].arg=c[tmp].arg;