[Cython] Sage build problem

Stefan Behnel stefan_ml at behnel.de
Fri Jan 31 12:55:13 CET 2014


There's some kind of C++ enum issue in the Sage build.

Generated code in sage/libs/ppl.cpp:

static PyObject *__pyx_pf_4sage_4libs_3ppl_11MIP_Problem_30solve(
             struct __pyx_obj_4sage_4libs_3ppl_MIP_Problem *__pyx_v_self) {
  enum Parma_Polyhedra_Library::PPL_MIP_Problem_Status __pyx_v_tmp;

gcc error:

sage/libs/ppl.cpp: In function 'PyObject*

sage/libs/ppl.cpp:5514:33: error: 'PPL_MIP_Problem_Status' in namespace
'Parma_Polyhedra_Library' does not name a type
sage/libs/ppl.cpp:5514:67: error: invalid type in declaration before ';' token

The type of "tmp" seems to be inferred. That might be a hint that it could
be a problem in Cython.

The Cython code in question is also a bit funny:

           tmp = self.thisptr.solve()             # <<<<<<<<<<<<<<

The try-finally is useless here, since the call to solve() cannot raise
Python exceptions. The new try-finally code generation shows this clearly,
it does not generate an exception handling block. The idea might have been
that it could raise C++ exceptions, but they don't seem to be declared, so
Cython won't do anything about them.

Might be a hint that Cython could do more to make C++ exception handling
safer by default.


More information about the cython-devel mailing list