[Numpy-discussion] puzzling compiler warning for numeric extension

Russell E Owen owen at astro.washington.edu
Wed May 12 16:59:07 CDT 2004


I modified an existing numeric c extension today, adding a function 
that returns a new array. This is the first time I've used 
NA_NewArray. The code seems to run fine, but I get a disturbing 
compiler warning:

[rowen:Shared Files/Guider/PyGuide] rowen% python setup.py build
...
src/radProfModule.c: In function `Py_radSqByRadInd':
src/radProfModule.c:378: warning: return from incompatible pointer type

The associated code can be summarized as follows (and it is simple 
enough that I've also appended a copy). The error is thrown on the 
last line:

static PyObject *Py_radSqByRadInd(PyObject *self, PyObject *args) {
	long nElt;
	Long *radSqByRadInd;

	if (!PyArg_ParseTuple(args, "l", &nElt))
		return NULL;
...
	return NA_NewArray((void *)radSqByRadInd, tLong, 1, nElt);
}

So...am I actually doing something wrong, or is this warning normal?

-- Russell

P.S. the full code:

static PyObject *Py_radSqByRadInd(PyObject *self, PyObject *args) {
	long nElt;
	Long radInd;
	char ModName[] = "radSqByRadInd";
	Long *radSqByRadInd;

	if (!PyArg_ParseTuple(args, "l", &nElt))
		return NULL;

	if (nElt < 0) {
		PyErr_Format(PyExc_ValueError, "%s: nPts < 0", ModName);
		return NULL;
	}

	// allocate max(3, nElt) elements (simplifies the computation
	// and avoids calling calloc on 0 elements)
	radSqByRadInd = calloc(MAX(nElt, 3), sizeof *radSqByRadInd);
	if (radSqByRadInd == NULL) {
		PyErr_Format(PyExc_MemoryError, "%s: insufficient 
memory", ModName);
		return NULL;
	}

	for (radInd=0; radInd<3; radInd++) {
		radSqByRadInd[radInd] = radInd;
	}
	for (radInd=3; radInd<nElt; radInd++) {
		radSqByRadInd[radInd] = (radInd - 1) * (radInd - 1);
	}

	return NA_NewArray((void *)radSqByRadInd, tLong, 1, nElt);
}




More information about the Numpy-discussion mailing list