diff options
| author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-05-17 03:59:48 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-17 03:59:48 -0700 |
| commit | 85ed1712e428f93408f56fc684816f9a85b0ebc0 (patch) | |
| tree | ab6f277a93255f5d7a7caa4af7d99d136a568be1 /Python/peephole.c | |
| parent | 94704048e2467dbb4c53ca02d103eab5671e84b3 (diff) | |
| download | cpython-git-85ed1712e428f93408f56fc684816f9a85b0ebc0.tar.gz | |
bpo-1875: Raise SyntaxError in invalid blocks that will be optimised away (GH-13332)
Move the check for dead conditionals (if 0) to the peephole optimizer
and make sure that the code block is still compiled to report any
existing syntax errors within.
(cherry picked from commit af8646c8054d0f4180a2013383039b6a472f9698)
Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
Diffstat (limited to 'Python/peephole.c')
| -rw-r--r-- | Python/peephole.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/Python/peephole.c b/Python/peephole.c index 95b3dbb6bf..1ae62fa39a 100644 --- a/Python/peephole.c +++ b/Python/peephole.c @@ -304,11 +304,19 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, case LOAD_CONST: cumlc = lastlc + 1; if (nextop != POP_JUMP_IF_FALSE || - !ISBASICBLOCK(blocks, op_start, i + 1) || - !PyObject_IsTrue(PyList_GET_ITEM(consts, get_arg(codestr, i)))) + !ISBASICBLOCK(blocks, op_start, i + 1)) { break; - fill_nops(codestr, op_start, nexti + 1); - cumlc = 0; + } + PyObject* cnt = PyList_GET_ITEM(consts, get_arg(codestr, i)); + int is_true = PyObject_IsTrue(cnt); + if (is_true == 1) { + fill_nops(codestr, op_start, nexti + 1); + cumlc = 0; + } else if (is_true == 0) { + h = get_arg(codestr, nexti) / sizeof(_Py_CODEUNIT); + tgt = find_op(codestr, codelen, h); + fill_nops(codestr, op_start, tgt); + } break; /* Try to fold tuples of constants. |
