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;