Robert Bradshaw, 31.07.2012 19:24:
> On Tue, Jul 31, 2012 at 7:24 AM, Stefan Behnel wrote:
>> mark florisson, 28.07.2012 14:04:
>>> On 27 July 2012 23:30, Bradley Froehle wrote:
>>>> Thanks to the work of Yaroslav Halchenko, there is an experimental Debian
>>>> package for Cython 0.17.beta1 --
>>>> http://packages.qa.debian.org/c/cython.html
>>>>
>>>> However, the builds are showing a lot of test failures on non-amd64 sytems.
>>>> See
>>>> https://buildd.debian.org/status/package.php?p=cython&suite=experimental
>>>> Many of the errors seem related to assumptions made about the sizes of
>>>> various integers (int vs. long vs long long). Ideally we'll be able to
>>>> clean up these failures before the final release.
>>>
>>> Thanks, I think it's mostly the tests that are wrong. I'll try to get
>>> it fixed on linux 32 bit.
>>
>> I'm not sure the it's only the tests. The "char" vs. "unsigned char" errors
>> hint at platform specific differences, which might trigger bugs (aka.
>> incorrect assumptions) in the generated memory view code. Specifically,
>> plain "char" is unsigned at least on ARM and PowerPC, both of which fail
>> with this error.
>
> Yes, I think somewhere we're assuming char is signed, but wasn't able
> to see where in my quick investigations.
Yes, it wasn't immediately obvious to me either. Here is a patch that
*might* fix the issue - obviously untested for the platforms in question.
Yaroslav, could you give it a try on the Debian build servers?
Stefan
diff -r 0d14a856f2cd Cython/Compiler/Buffer.py
--- a/Cython/Compiler/Buffer.py Tue Jul 31 20:05:37 2012 +0200
+++ b/Cython/Compiler/Buffer.py Tue Jul 31 21:10:13 2012 +0200
@@ -680,32 +680,25 @@
rep = str(dtype)
flags = "0"
-
+ is_unsigned = "0"
if dtype.is_int:
- if dtype.signed == 0:
- typegroup = 'U'
- else:
- typegroup = 'I'
+ is_unsigned = "IS_UNSIGNED(%s)" % declcode
+ typegroup = "%s ? 'U' : 'I'" % is_unsigned
elif complex_possible or dtype.is_complex:
- typegroup = 'C'
+ typegroup = "'C'"
elif dtype.is_float:
- typegroup = 'R'
+ typegroup = "'R'"
elif dtype.is_struct:
- typegroup = 'S'
+ typegroup = "'S'"
if dtype.packed:
flags = "__PYX_BUF_FLAGS_PACKED_STRUCT"
elif dtype.is_pyobject:
- typegroup = 'O'
+ typegroup = "'O'"
else:
assert False
- if dtype.is_int:
- is_unsigned = "IS_UNSIGNED(%s)" % declcode
- else:
- is_unsigned = "0"
-
typeinfo = ('static __Pyx_TypeInfo %s = '
- '{ "%s", %s, sizeof(%s), { %s }, %s, \'%s\', %s, %s };')
+ '{ "%s", %s, sizeof(%s), { %s }, %s, %s, %s, %s };')
tup = (name, rep, structinfo_name, declcode,
', '.join([str(x) for x in arraysizes]) or '0', len(arraysizes),
typegroup, is_unsigned, flags)
_______________________________________________
cython-devel mailing list
[email protected]
http://mail.python.org/mailman/listinfo/cython-devel