Bug #1586448: the compiler module now emits the same bytecode for
list comprehensions as the builtin compiler, using the LIST_APPEND
opcode.
diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py
index 009438d..0e226fd 100644
--- a/Lib/compiler/pycodegen.py
+++ b/Lib/compiler/pycodegen.py
@@ -573,12 +573,11 @@
     def visitListComp(self, node):
         self.set_lineno(node)
         # setup list
-        append = "$append%d" % self.__list_count
+        tmpname = "$list%d" % self.__list_count
         self.__list_count = self.__list_count + 1
         self.emit('BUILD_LIST', 0)
         self.emit('DUP_TOP')
-        self.emit('LOAD_ATTR', 'append')
-        self._implicitNameOp('STORE', append)
+        self._implicitNameOp('STORE', tmpname)
 
         stack = []
         for i, for_ in zip(range(len(node.quals)), node.quals):
@@ -590,10 +589,9 @@
                 self.visit(if_, cont)
             stack.insert(0, (start, cont, anchor))
 
-        self._implicitNameOp('LOAD', append)
+        self._implicitNameOp('LOAD', tmpname)
         self.visit(node.expr)
-        self.emit('CALL_FUNCTION', 1)
-        self.emit('POP_TOP')
+        self.emit('LIST_APPEND',)
 
         for start, cont, anchor in stack:
             if cont:
@@ -604,7 +602,7 @@
                 self.nextBlock(skip_one)
             self.emit('JUMP_ABSOLUTE', start)
             self.startBlock(anchor)
-        self._implicitNameOp('DELETE', append)
+        self._implicitNameOp('DELETE', tmpname)
 
         self.__list_count = self.__list_count - 1
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 605a862..8cb10fa 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -89,6 +89,10 @@
 Library
 -------
 
+- Bug #1586448: the compiler module now emits the same bytecode for
+  list comprehensions as the builtin compiler, using the LIST_APPEND
+  opcode.
+
 - Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and
   fix all codecs file wrappers to work correctly with the "with"
   statement (bug #1586513).