[Cython] Bug: Returning real value crashes the code, complex value does not

Robert Bradshaw robertwb at gmail.com
Wed Mar 27 22:36:12 CET 2013


On Wed, Mar 27, 2013 at 2:44 AM, Martin Fiers
<Martin.Fiers at intec.ugent.be> wrote:
> On 3/27/2013 3:54 AM, Robert Bradshaw wrote:
>>
>> On Tue, Mar 26, 2013 at 5:12 PM, Martin Fiers
>> <Martin.Fiers at intec.ugent.be> wrote:
>>>
>>> On 3/26/2013 6:48 PM, Robert Bradshaw wrote:
>>>>
>>>> On Tue, Mar 26, 2013 at 2:52 AM, Martin Fiers
>>>> <Martin.Fiers at intec.ugent.be> wrote:
>>>>>
>>>>> Dear Cython developers,
>>>>>
>>>>> I stumbled upon a strange error when using Cython. I made a minimal
>>>>> working
>>>>> example, see attachment for the two necessary files. (btw I didn't find
>>>>> the
>>>>> e-mail address of Robert Bradshaw so I could not request him for an
>>>>> account
>>>>> on the issue tracker. Is it possible to put the bug on there?)
>>>>
>>>> Sure. You should have my email now.
>>>
>>> Thank you! I just sent a mail.
>>>
>>> Also, thanks for replying so quickly. Replies follow inline.
>>>
>>>>> To reproduce the bug:
>>>>> 1) Reboot to Windows :) (the bug only appears on Windows)
>>>>> 2) Run compile_bug.py to generate the Cython extension
>>>>> 3) Try to run the my_func_exposed function:
>>>>>
>>>>> python
>>>>>>>>
>>>>>>>> import complex_double
>>>>>
>>>>> (does not crash)
>>>>>>>>
>>>>>>>> complex_double.my_func_exposed(1,1j)
>>>>>
>>>>> (crashes)
>>>>>>>>
>>>>>>>> complex_double.my_func_exposed(1,1)
>>>>>
>>>>> If I put a breakpoint in the code with gdb, jump in the code, and leave
>>>>> the
>>>>> function again, it does not crash! Also, it is no problem on Linux.
>>>>>
>>>>> It has to do with the fact that in the first case, a real value was
>>>>> used.
>>>>> In
>>>>> the complex-value case, it does not crash. I went through the generated
>>>>> cpp
>>>>> file and I don't see any issues there (the reason I use cpp is because
>>>>> it's
>>>>> in a big project that needs cpp enabled; it is further linked and so
>>>>> on).
>>>>>
>>>>> gcc version used: 4.6.2 (mingw)
>>>>> cython version used: 0.18 (I did pip install Cython)
>>>>> python version used: python 2.7.3 (MSC v.1500 32 bit).
>>>>
>>>> Very strange. Does calling PyComplex_AsCComplex directly produce the
>>>> same crash? What about
>>>
>>> I'm not sure how to call this directly. Do you mean by modifying the
>>> generated cpp file and then manually building an extension module?
>>>
>>>>       cdef complex double x = 1.0
>>>
>>> This one works.
>>>
>>>> or
>>>>
>>>>       cdef object py_x = 1.0
>>>>       cdef complex double x = py_x
>>>
>>> This one crashes!
>>
>> Ah. Try
>>
>>      from cpython.complex cimport Py_complex, PyComplex_AsCComplex
>>      cdef Py_complex x = PyComplex_AsCComplex(py_x)
>>      print x.real, x.imag
>
> Ok. I tried this, and it also crashes. Here's the modification:
>
> from cpython.complex cimport Py_complex
> from cpython.complex cimport PyComplex_AsCComplex
>
> @cython.cdivision(True)
> cdef public double complex my_func(int a, b):
>
>     cdef object py_x = 1.0
>
>     #cdef double complex x = 1.0                    # Does not crash
>     #cdef double complex x2 = py_x                  # Crashes for py_x = 1,
> not for py_x=1j.
>     #cdef Py_complex x = PyComplex_AsCComplex(py_x) # Crashes, even for
> py_x=1j
>     #print x.real, x.imag
>
> And as you can see, the PyComplex_AsCComplex also crashes (SIGSEGV).
> I tried to compile with debug information, as in the instructions in
> http://docs.cython.org/src/userguide/debugging.html
> But I cannot get the line numbers. Probably I need a debug-python version,
> but that seems to be very nontrivial on Windows.
>
> Not sure if I can think of other options to test it and/or track down the
> bug...
>
> Now it even crashes when py_x = 1j. So maybe there's something else going
> wrong here too.

I wonder if it's a compiler miss-match or something like that.

> Regards,
> Martin
>
> P.S. I only replied to you because you didn't put the
> cython-devel at python.org in the previous mail.

Oops. Un-intentional oversight.


More information about the cython-devel mailing list