提交 fbd0465d authored 作者: Vivek Kulkarni's avatar Vivek Kulkarni

Replacing assert with Py_ErrFormat so that exception stack is seen if assert ever fails

上级 70ed05cc
...@@ -2460,6 +2460,12 @@ class GpuAdvancedIncSubtensor1(tensor.AdvancedIncSubtensor1, GpuOp): ...@@ -2460,6 +2460,12 @@ class GpuAdvancedIncSubtensor1(tensor.AdvancedIncSubtensor1, GpuOp):
dtype_%(ind)s *p_index; dtype_%(ind)s *p_index;
int num_indices, j; int num_indices, j;
num_indices = PyArray_SIZE(%(ind)s);
if ((num_indices - 1) > LONG_MAX) {
PyErr_Format(PyExc_AssertionError, "num_indices %%d exceeds LONG_MAX + 1", num_indices);
%(fail)s;
}
Py_XDECREF(%(out)s); Py_XDECREF(%(out)s);
if (!%(inplace)s) { if (!%(inplace)s) {
%(out)s = (CudaNdarray*)CudaNdarray_Copy(%(x)s); %(out)s = (CudaNdarray*)CudaNdarray_Copy(%(x)s);
...@@ -2470,14 +2476,23 @@ class GpuAdvancedIncSubtensor1(tensor.AdvancedIncSubtensor1, GpuOp): ...@@ -2470,14 +2476,23 @@ class GpuAdvancedIncSubtensor1(tensor.AdvancedIncSubtensor1, GpuOp):
x_obj = (PyObject*)CudaNdarray_View(%(x)s); x_obj = (PyObject*)CudaNdarray_View(%(x)s);
y_obj = (PyObject*)CudaNdarray_View(%(y)s); y_obj = (PyObject*)CudaNdarray_View(%(y)s);
num_indices = PyArray_SIZE(%(ind)s);
assert((num_indices - 1) <= LONG_MAX);
for (j = 0;j < num_indices; j++) { for (j = 0;j < num_indices; j++) {
p_index = (dtype_%(ind)s *)PyArray_GETPTR1(%(ind)s, j); p_index = (dtype_%(ind)s *)PyArray_GETPTR1(%(ind)s, j);
x_rowind_obj = PyInt_FromLong(*p_index); x_rowind_obj = PyInt_FromLong(*p_index);
assert(PyInt_AsLong(x_rowind_obj) == (*p_index));
if (PyInt_AsLong(x_rowind_obj) != (*p_index)) {
PyErr_Format(PyExc_AssertionError, "Error in converting row index to integer from long");
// Dec Ref what ever we have increfed or allocated so far
// We deallocate objects exactly in the reverse order they were allocated.
Py_XDECREF(x_rowind_obj);
Py_XDECREF(y_obj);
Py_XDECREF(x_obj);
%(fail)s;
}
y_rowind_obj = PyInt_FromLong(j); y_rowind_obj = PyInt_FromLong(j);
row_x = CudaNdarray_Subscript(x_obj, x_rowind_obj); row_x = CudaNdarray_Subscript(x_obj, x_rowind_obj);
...@@ -2488,8 +2503,8 @@ class GpuAdvancedIncSubtensor1(tensor.AdvancedIncSubtensor1, GpuOp): ...@@ -2488,8 +2503,8 @@ class GpuAdvancedIncSubtensor1(tensor.AdvancedIncSubtensor1, GpuOp):
Py_XDECREF(y_rowind_obj); Py_XDECREF(y_rowind_obj);
} }
Py_XDECREF(x_obj);
Py_XDECREF(y_obj); Py_XDECREF(y_obj);
Py_XDECREF(x_obj);
if (!%(out)s) { if (!%(out)s) {
%(fail)s %(fail)s
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论