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-py3k-cpp/951/consoleFull

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
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to