turn goto into do while loop
diff --git a/Python/compile.c b/Python/compile.c
index a35cda1..35ee48b 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -3586,49 +3586,47 @@
 assemble_jump_offsets(struct assembler *a, struct compiler *c)
 {
 	basicblock *b;
-	int bsize, totsize, extended_arg_count, last_extended_arg_count = 0;
+	int bsize, totsize, extended_arg_count = 0, last_extended_arg_count;
 	int i;
 
 	/* Compute the size of each block and fixup jump args.
 	   Replace block pointer with position in bytecode. */
-start:
-	totsize = 0;
-	for (i = a->a_nblocks - 1; i >= 0; i--) {
-		b = a->a_postorder[i];
-		bsize = blocksize(b);
-		b->b_offset = totsize;
-		totsize += bsize;
-	}
-	extended_arg_count = 0;
-	for (b = c->u->u_blocks; b != NULL; b = b->b_list) {
-		bsize = b->b_offset;
-		for (i = 0; i < b->b_iused; i++) {
-			struct instr *instr = &b->b_instr[i];
-			/* Relative jumps are computed relative to
-			   the instruction pointer after fetching
-			   the jump instruction.
-			*/
-			bsize += instrsize(instr);
-			if (instr->i_jabs)
-				instr->i_oparg = instr->i_target->b_offset;
-			else if (instr->i_jrel) {
-				int delta = instr->i_target->b_offset - bsize;
-				instr->i_oparg = delta;
-			}
-			else
-				continue;
-			if (instr->i_oparg > 0xffff)
-				extended_arg_count++;
+	do {
+		totsize = 0;
+		for (i = a->a_nblocks - 1; i >= 0; i--) {
+			b = a->a_postorder[i];
+			bsize = blocksize(b);
+			b->b_offset = totsize;
+			totsize += bsize;
 		}
-	}
+		last_extended_arg_count = extended_arg_count;
+		extended_arg_count = 0;
+		for (b = c->u->u_blocks; b != NULL; b = b->b_list) {
+			bsize = b->b_offset;
+			for (i = 0; i < b->b_iused; i++) {
+				struct instr *instr = &b->b_instr[i];
+				/* Relative jumps are computed relative to
+				   the instruction pointer after fetching
+				   the jump instruction.
+				*/
+				bsize += instrsize(instr);
+				if (instr->i_jabs)
+					instr->i_oparg = instr->i_target->b_offset;
+				else if (instr->i_jrel) {
+					int delta = instr->i_target->b_offset - bsize;
+					instr->i_oparg = delta;
+				}
+				else
+					continue;
+				if (instr->i_oparg > 0xffff)
+					extended_arg_count++;
+			}
+		}
 
 	/* XXX: This is an awful hack that could hurt performance, but
 		on the bright side it should work until we come up
 		with a better solution.
 
-		In the meantime, should the goto be dropped in favor
-		of a loop?
-
 		The issue is that in the first loop blocksize() is called
 		which calls instrsize() which requires i_oparg be set
 		appropriately.	There is a bootstrap problem because
@@ -3639,10 +3637,7 @@
 		ones in jump instructions.  So this should converge
 		fairly quickly.
 	*/
-	if (last_extended_arg_count != extended_arg_count) {
-		last_extended_arg_count = extended_arg_count;
-		goto start;
-	}
+	} while (last_extended_arg_count != extended_arg_count);
 }
 
 static PyObject *