[Python-checkins] cpython: Issue #23450: Silenced compiler warnings and added asserts in peephole

serhiy.storchaka python-checkins at python.org
Mon Feb 16 20:14:27 CET 2015


https://hg.python.org/cpython/rev/1eee26b74e4b
changeset:   94656:1eee26b74e4b
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Mon Feb 16 21:13:24 2015 +0200
summary:
  Issue #23450: Silenced compiler warnings and added asserts in peephole optimizer.

files:
  Python/peephole.c |  12 +++++++++---
  1 files changed, 9 insertions(+), 3 deletions(-)


diff --git a/Python/peephole.c b/Python/peephole.c
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -18,7 +18,11 @@
     || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP)
 #define JUMPS_ON_TRUE(op) (op==POP_JUMP_IF_TRUE || op==JUMP_IF_TRUE_OR_POP)
 #define GETJUMPTGT(arr, i) (GETARG(arr,i) + (ABSOLUTE_JUMP(arr[i]) ? 0 : i+3))
-#define SETARG(arr, i, val) arr[i+2] = val>>8; arr[i+1] = val & 255
+#define SETARG(arr, i, val) do {                            \
+    assert(0 <= val && val <= 0xffff);                      \
+    arr[i+2] = (unsigned char)(((unsigned int)val)>>8);     \
+    arr[i+1] = (unsigned char)(((unsigned int)val) & 255);  \
+} while(0)
 #define CODESIZE(op)  (HAS_ARG(op) ? 3 : 1)
 #define ISBASICBLOCK(blocks, start, bytes) \
     (blocks[start]==blocks[start+bytes-1])
@@ -355,7 +359,8 @@
     unsigned char *codestr = NULL;
     unsigned char *lineno;
     int *addrmap = NULL;
-    int new_line, cum_orig_line, last_line, tabsiz;
+    int new_line, cum_orig_line, last_line;
+    Py_ssize_t tabsiz;
     PyObject **const_stack = NULL;
     Py_ssize_t *load_const_stack = NULL;
     Py_ssize_t const_stack_top = -1;
@@ -660,7 +665,8 @@
 
     /* Fixup linenotab */
     for (i=0, nops=0 ; i<codelen ; i += CODESIZE(codestr[i])) {
-        addrmap[i] = i - nops;
+        assert(i - nops <= INT_MAX);
+        addrmap[i] = (int)(i - nops);
         if (codestr[i] == NOP)
             nops++;
     }

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list