Issue 11510: Fix BUILD_SET optimizer bug.
This commit is contained in:
parent
729c5e203d
commit
29dcaad6eb
|
@ -267,11 +267,23 @@ class TestTranforms(unittest.TestCase):
|
|||
asm = disassemble(f)
|
||||
self.assertNotIn('BINARY_ADD', asm)
|
||||
|
||||
class TestBuglets(unittest.TestCase):
|
||||
|
||||
def test_bug_11510(self):
|
||||
# folded constant set optimization was commingled with the tuple
|
||||
# unpacking optimization which would fail if the set had duplicate
|
||||
# elements so that the set length was unexpected
|
||||
def f():
|
||||
x, y = {1, 1}
|
||||
return x, y
|
||||
with self.assertRaises(ValueError):
|
||||
f()
|
||||
|
||||
|
||||
def test_main(verbose=None):
|
||||
import sys
|
||||
from test import support
|
||||
test_classes = (TestTranforms,)
|
||||
test_classes = (TestTranforms, TestBuglets)
|
||||
support.run_unittest(*test_classes)
|
||||
|
||||
# verify reference counting
|
||||
|
|
|
@ -10,6 +10,8 @@ What's New in Python 3.2.1?
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #11510: Fixed optimizer bug which turned "a,b={1,1}" into "a,b=(1,1)".
|
||||
|
||||
- Issue #11432: A bug was introduced in subprocess.Popen on posix systems with
|
||||
3.2.0 where the stdout or stderr file descriptor being the same as the stdin
|
||||
file descriptor would raise an exception. webbrowser.open would fail. fixed.
|
||||
|
|
|
@ -475,7 +475,8 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
|
|||
}
|
||||
if (codestr[i+3] != UNPACK_SEQUENCE ||
|
||||
!ISBASICBLOCK(blocks,i,6) ||
|
||||
j != GETARG(codestr, i+3))
|
||||
j != GETARG(codestr, i+3) ||
|
||||
opcode == BUILD_SET)
|
||||
continue;
|
||||
if (j == 1) {
|
||||
memset(codestr+i, NOP, 6);
|
||||
|
|
Loading…
Reference in New Issue