[Cython] memoryview of extension types: warnings with gcc, errors with g++
Matěj Laitl
matej at laitl.cz
Fri Nov 30 01:45:16 CET 2012
Hi list and Mark,
it seems that C code with questionable casts is generated when using memory
views of extension types. I get following warnings from gcc:
extension_type_memoryview.c: In function ‘__pyx_pf_25extension_type_memoryview_test_getitem’:
extension_type_memoryview.c:1468:15: warning: assignment from incompatible pointer type
extension_type_memoryview.c: In function ‘__pyx_pf_25extension_type_memoryview_2test_getitem_typed’:
extension_type_memoryview.c:1565:15: warning: assignment from incompatible pointer type
extension_type_memoryview.c:1568:18: warning: assignment from incompatible pointer type
And following errors if compiling in C++ mode with g++:
extension_type_memoryview.c: In function ‘PyObject* __pyx_pf_25extension_type_memoryview_test_getitem(PyObject*)’:
extension_type_memoryview.c:1468:213: error: cannot convert ‘__pyx_obj_25extension_type_memoryview_ExtensionType*’ to ‘PyObject*’ in assignment
extension_type_memoryview.c: In function ‘PyObject* __pyx_pf_25extension_type_memoryview_2test_getitem_typed(PyObject*)’:
extension_type_memoryview.c:1565:213: error: cannot convert ‘__pyx_obj_25extension_type_memoryview_ExtensionType*’ to ‘PyObject*’ in assignment
extension_type_memoryview.c:1568:20: error: cannot convert ‘PyObject*’ to ‘__pyx_obj_25extension_type_memoryview_ExtensionType*’ in assignment
I get exactly the same error when --cplus is passed to Cython and
extension_type_memoryview.cpp is generated/compiled.
...which currently prevents my project combining C++ code with extension
types and memory views to compile. :-( Test-case is attached. Cython 0.17.2.
Regards,
Matěj
-------------- next part --------------
# mode: run
# tags: numpy, cpp
import numpy as np
cdef class ExtensionType(object):
cdef public int dummy
def __init__(self, n):
self.dummy = n
items = [ExtensionType(1), ExtensionType(2)]
cdef ExtensionType[:] view = np.array(items, dtype=ExtensionType)
def test_getitem():
"""
>>> test_getitem()
1
2
"""
for i in range(view.shape[0]):
item = view[i]
print item.dummy
def test_getitem_typed():
"""
>>> test_getitem_typed()
1
2
"""
cdef ExtensionType item
for i in range(view.shape[0]):
item = view[i]
print item.dummy
More information about the cython-devel
mailing list