From: Victor Stinner Date: Tue, 1 Mar 2016 22:34:47 +0000 (+0100) Subject: Update assertion in compiler_addop_i() X-Git-Tag: v3.6.0a1~546 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2ad474ba5e8ac06b7edae3cd2e15ab93212dd01b;p=python Update assertion in compiler_addop_i() In practice, bytecode instruction arguments are unsigned. Update the assertion to make it more explicit that argument must be greater or equal than 0. Rewrite also the comment. --- diff --git a/Python/compile.c b/Python/compile.c index 568bdfe379..e86b293543 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1163,10 +1163,14 @@ compiler_addop_i(struct compiler *c, int opcode, Py_ssize_t oparg) struct instr *i; int off; - /* Integer arguments are limit to 16-bit. There is an extension for 32-bit - integer arguments. */ - assert((-2147483647-1) <= oparg); - assert(oparg <= 2147483647); + /* oparg value is unsigned, but a signed C int is usually used to store + it in the C code (like Python/ceval.c). + + Limit to 32-bit signed C int (rather than INT_MAX) for portability. + + The argument of a concrete bytecode instruction is limited to 16-bit. + EXTENDED_ARG is used for 32-bit arguments. */ + assert(0 <= oparg && oparg <= 2147483647); off = compiler_next_instr(c, c->u->u_curblock); if (off < 0)