Hi, I noticed a couple of problems in the latest pyregr test run for py3k. https://sage.math.washington.edu:8091/hudson/job/cython-devel-tests-pyregr-p... 1) test_contextlib.cpp:16926: warning: deprecated conversion from string constant to ‘char*’ This repeated warning refers (I assume) to each literal in this code: """ char* __pyx_import_star_type_names[] = { "__pyx_scope_struct_2_test_contextmanager_finally", "__pyx_scope_struct_19_test_contextmanager_as_decorator", [...] "__pyx_scope_struct_6_test_contextmanager_except", "__pyx_scope_struct_12_testWithCondition", 0 }; """ This looks like a standard C++ WTF to me. I noticed that Lisandro keeps casting string literals in his code, so I wonder if that's something we need to do here as well? 2) test_cgi.cpp:2494: error: ‘None’ was not declared in this scope There seems to be a problem with the dict-loop optimisation. This is how the following code gets translated: """ * for k, v in dict(form).items(): # <<<<<<<<<<<<<< __Pyx_INCREF(None); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = None; __pyx_t_5 = 0; __pyx_t_6 = PyDict_Size(__pyx_t_1); while (1) { /* __pyx_t_7 allocated */ /* __pyx_t_8 allocated */ if (unlikely(__pyx_t_6 != PyDict_Size(__pyx_t_1))) { PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; """ Looks like the literal doesn't get evaluated. I'll look into this. 3) warning: TestClassUtilityCode:18:10: 'cpdef_method' redeclared warning: TestClassUtilityCode:29:10: 'cpdef_cname_method' redeclared 4) test_pep263.cpp:520: error: redefinition of ‘PyObject* __pyx_kp_b_1’ test_pep263.cpp:519: error: ‘PyObject* __pyx_kp_b_1’ previously declared here test_pep263.cpp:526: error: redefinition of ‘PyObject* __pyx_kp_b_2’ test_pep263.cpp:525: error: ‘PyObject* __pyx_kp_b_2’ previously declared here Triggered by this code, which refers to the same byte string literals twice in both cases: """ * self.assertEqual( # <<<<<<<<<<<<<< * "".encode("utf-8"), * b'\xd0\x9f\xd0\xb8\xd1\x82\xd0\xbe\xd0\xbd' */ /* __pyx_t_1 allocated */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__assertEqual); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); /* __pyx_t_2 allocated */ __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(((PyObject *)__pyx_kp_b_1)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_b_1)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_b_1)); __Pyx_INCREF(((PyObject *)__pyx_kp_b_1)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_kp_b_1)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_b_1)); * self.assertEqual( # <<<<<<<<<<<<<< * "\".encode("utf-8"), * b'\\\xd0\x9f' */ /* __pyx_t_3 allocated */ __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__assertEqual); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); /* __pyx_t_2 allocated */ __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(((PyObject *)__pyx_kp_b_2)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_b_2)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_b_2)); __Pyx_INCREF(((PyObject *)__pyx_kp_b_2)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_kp_b_2)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_b_2)); """ 5) there are also several compiler crashes in that log 6) several tests bail out with """ File "runtests.py", line 900, in run_test except (unittest.SkipTest, support.ResourceDenied): AttributeError: 'module' object has no attribute 'ResourceDenied' """ I guess that's an incompatibility of our test runner with the latest Py3k. 7) g++: /.../workspace/BUILD/pyregr/cpp/test_inspect.o: No such file or directory g++: no input files There are loads of these - not sure what might trigger them. As I said, I'll look into the dict looping bug. If any of the other bugs is obvious to someone and not too hard to fix, it would be nice to get it done for the release. However, I think none of them is a real blocker. Stefan
2011/7/31 Stefan Behnel <stefan_ml@behnel.de>:
Hi,
I noticed a couple of problems in the latest pyregr test run for py3k.
https://sage.math.washington.edu:8091/hudson/job/cython-devel-tests-pyregr-p...
1) test_contextlib.cpp:16926: warning: deprecated conversion from string constant to ‘char*’
This repeated warning refers (I assume) to each literal in this code:
""" char* __pyx_import_star_type_names[] = { "__pyx_scope_struct_2_test_contextmanager_finally", "__pyx_scope_struct_19_test_contextmanager_as_decorator", [...] "__pyx_scope_struct_6_test_contextmanager_except", "__pyx_scope_struct_12_testWithCondition", 0 }; """
This looks like a standard C++ WTF to me. I noticed that Lisandro keeps casting string literals in his code, so I wonder if that's something we need to do here as well?
That's really annoying. I was bothering this in CyFunction branch. I think we should introduce new macro here: #define __Pyx_STRCONST(x) ((char *) (x))
6) several tests bail out with
""" File "runtests.py", line 900, in run_test except (unittest.SkipTest, support.ResourceDenied): AttributeError: 'module' object has no attribute 'ResourceDenied' """
I guess that's an incompatibility of our test runner with the latest Py3k.
That's because latest py3k has test_support module again: try: from test import test_support as support except ImportError: # Py3k from test import support Think I should change the order -- vitja.
participants (2)
-
Stefan Behnel -
Vitja Makarov