Pop loop off the loop stack before handling the loop's else clause.
Otherwise, continue/break will attempt to affect the wrong loop.

A few more fiddles to get the SET_LINENOs consistent across compilers.
diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py
index dc2be32..9f58067 100644
--- a/Lib/compiler/pycodegen.py
+++ b/Lib/compiler/pycodegen.py
@@ -326,7 +326,7 @@
         self.nextBlock(loop)
         self.loops.push(loop)
 
-        self.set_lineno(node)
+        self.set_lineno(node, force=1)
         self.visit(node.test)
         self.emit('JUMP_IF_FALSE', else_ or after)
 
@@ -338,9 +338,9 @@
         self.startBlock(else_) # or just the POPs if not else clause
         self.emit('POP_TOP')
         self.emit('POP_BLOCK')
+        self.loops.pop()
         if node.else_:
             self.visit(node.else_)
-        self.loops.pop()
         self.nextBlock(after)
 
     def visitFor(self, node):
@@ -354,7 +354,7 @@
         self.visit(node.list)
         self.visit(ast.Const(0))
         self.nextBlock(start)
-        self.set_lineno(node)
+        self.set_lineno(node, force=1)
         self.emit('FOR_LOOP', anchor)
         self.nextBlock()
         self.visit(node.assign)
@@ -362,9 +362,9 @@
         self.emit('JUMP_ABSOLUTE', start)
         self.startBlock(anchor)
         self.emit('POP_BLOCK')
+        self.loops.pop()
         if node.else_:
             self.visit(node.else_)
-        self.loops.pop()
         self.nextBlock(after)
 
     def visitBreak(self, node):
diff --git a/Tools/compiler/compiler/pycodegen.py b/Tools/compiler/compiler/pycodegen.py
index dc2be32..9f58067 100644
--- a/Tools/compiler/compiler/pycodegen.py
+++ b/Tools/compiler/compiler/pycodegen.py
@@ -326,7 +326,7 @@
         self.nextBlock(loop)
         self.loops.push(loop)
 
-        self.set_lineno(node)
+        self.set_lineno(node, force=1)
         self.visit(node.test)
         self.emit('JUMP_IF_FALSE', else_ or after)
 
@@ -338,9 +338,9 @@
         self.startBlock(else_) # or just the POPs if not else clause
         self.emit('POP_TOP')
         self.emit('POP_BLOCK')
+        self.loops.pop()
         if node.else_:
             self.visit(node.else_)
-        self.loops.pop()
         self.nextBlock(after)
 
     def visitFor(self, node):
@@ -354,7 +354,7 @@
         self.visit(node.list)
         self.visit(ast.Const(0))
         self.nextBlock(start)
-        self.set_lineno(node)
+        self.set_lineno(node, force=1)
         self.emit('FOR_LOOP', anchor)
         self.nextBlock()
         self.visit(node.assign)
@@ -362,9 +362,9 @@
         self.emit('JUMP_ABSOLUTE', start)
         self.startBlock(anchor)
         self.emit('POP_BLOCK')
+        self.loops.pop()
         if node.else_:
             self.visit(node.else_)
-        self.loops.pop()
         self.nextBlock(after)
 
     def visitBreak(self, node):