New issue 2334: wrong function called for slot in cpyext + numpy
https://bitbucket.org/pypy/pypy/issues/2334/wrong-function-called-for-slot-in-cpyext

mattip:

Upstream numpy assigned `int_multiply` to the `np_multiply` slot of 
numpy.int32, and `gentype_multiply` to the `np_multipy` slot of numpy.int32 's 
tp_base type (and other places as well).

In **cpython**, when I call either `import numpy as np; np.int32(2) * [1, 2, 
3]` or `import numpy as np; [1, 2, 3] * np.int32(2)`, it calls into 
`int_multiply`, in **pypy** it calls `gentype_multiply` which then calls 
`array_multiply`. When I stop in gdb at those functions, in both pypy and 
cpython the correct binary function is being used (the np.int32 is the expected 
right or left argument) and the its ob_type shows int_multiply as 
val->ob_type->tp_as_number->tp_multiply.

I added a test to test_arraymodule.py to default in f0b680130986 that shows, at 
least in this simple case, that the binop_mul_impl resolution is working as 
advertised, I suspect the problem is in the creation of the PyPy w_type from 
numpy.int32 in PyType_Ready. I tried adding a base class with a different 
np_multiply slot to the array.c that is tested by test_arraymodule, but the 
test still worked correctly.

To reproduces the error, it is enough to::

- build/install numpy with debug info, 
- run `gdb --args <pypy/cpython> -c "import numpy as np; np.int(2) * [1, 2, 
3]"`, 
- set breakpoints at int_multiply and array_multiply

To compile numpy with debug info, cd into a clone of numpy and `rm -rf build; 
CFLAGS='-g -O0' <pypy or cpython> setup.py install`

How can I reproduce this error untranslated?


_______________________________________________
pypy-issue mailing list
pypy-issue@python.org
https://mail.python.org/mailman/listinfo/pypy-issue

Reply via email to