diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 1a95e76..1c5b0e5 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -202,7 +202,6 @@
 #define F_PY_TO_S	PyLong_AsLong
 #define F_U_TO_PY	PyLong_FromUnsignedLong
 #define F_PY_TO_U	PyLong_AsUnsignedLong
-#define F_ERROR		raise_test_long_error
 
 #include "testcapi_long.h"
 
@@ -212,7 +211,7 @@
         if (!PyArg_ParseTuple(args, ":test_long_api"))
                 return NULL;
 
-	return TESTNAME();
+	return TESTNAME(raise_test_long_error);
 }
 
 #undef TESTNAME
@@ -221,7 +220,6 @@
 #undef F_PY_TO_S
 #undef F_U_TO_PY
 #undef F_PY_TO_U
-#undef F_ERROR
 
 #ifdef HAVE_LONG_LONG
 
@@ -237,7 +235,6 @@
 #define F_PY_TO_S	PyLong_AsLongLong
 #define F_U_TO_PY	PyLong_FromUnsignedLongLong
 #define F_PY_TO_U	PyLong_AsUnsignedLongLong
-#define F_ERROR		raise_test_longlong_error
 
 #include "testcapi_long.h"
 
@@ -247,7 +244,7 @@
         if (!PyArg_ParseTuple(args, ":test_longlong_api"))
                 return NULL;
 
-	return TESTNAME();
+	return TESTNAME(raise_test_longlong_error);
 }
 
 #undef TESTNAME
@@ -256,7 +253,6 @@
 #undef F_PY_TO_S
 #undef F_U_TO_PY
 #undef F_PY_TO_U
-#undef F_ERROR
 
 #endif	/* ifdef HAVE_LONG_LONG */
 
diff --git a/Modules/testcapi_long.h b/Modules/testcapi_long.h
index 7c5a7e7..8ed6b02 100644
--- a/Modules/testcapi_long.h
+++ b/Modules/testcapi_long.h
@@ -4,12 +4,11 @@
    F_S_TO_PY	convert signed to pylong; TYPENAME -> PyObject*
    F_PY_TO_S	convert pylong to signed; PyObject* -> TYPENAME
    F_U_TO_PY	convert unsigned to pylong; unsigned TYPENAME -> PyObject*
-   F_PY_TO_U    convert pylong to unsigned; PyObject* -> TypeError
-   F_ERROR	error-report function; char* -> PyObject* (returns NULL)
+   F_PY_TO_U    convert pylong to unsigned; PyObject* -> unsigned TYPENAME
 */
 
 static PyObject *
-TESTNAME()
+TESTNAME(PyObject *error(const char*))
 {
 	const int NBITS = sizeof(TYPENAME) * 8;
 	unsigned TYPENAME base;
@@ -45,30 +44,30 @@
 
 			pyresult = F_U_TO_PY(uin);
 			if (pyresult == NULL)
-				return F_ERROR(
+				return error(
 				 "unsigned unexpected null result");
 
 			uout = F_PY_TO_U(pyresult);
 			if (uout == (unsigned TYPENAME)-1 && PyErr_Occurred())
-				return F_ERROR(
+				return error(
 					"unsigned unexpected -1 result");
 			if (uout != uin)
-				return F_ERROR(
+				return error(
 					"unsigned output != input");
 			UNBIND(pyresult);
 
 			in = (TYPENAME)uin;
 			pyresult = F_S_TO_PY(in);
 			if (pyresult == NULL)
-				return F_ERROR(
+				return error(
 					"signed unexpected null result");
 
 			out = F_PY_TO_S(pyresult);
 			if (out == (TYPENAME)-1 && PyErr_Occurred())
-				return F_ERROR(
+				return error(
 					"signed unexpected -1 result");
 			if (out != in)
-				return F_ERROR(
+				return error(
 					"signed output != input");
 			UNBIND(pyresult);
 		}
@@ -85,18 +84,18 @@
 
 		one = PyLong_FromLong(1);
 		if (one == NULL)
-			return F_ERROR(
+			return error(
 				"unexpected NULL from PyLong_FromLong");
 
 		/* Unsigned complains about -1? */
 		x = PyNumber_Negative(one);
 		if (x == NULL)
-			return F_ERROR(
+			return error(
 				"unexpected NULL from PyNumber_Negative");
 
 		uout = F_PY_TO_U(x);
 		if (uout != (unsigned TYPENAME)-1 || !PyErr_Occurred())
-			return F_ERROR(
+			return error(
 				"PyLong_AsUnsignedXXX(-1) didn't complain");
 		PyErr_Clear();
 		UNBIND(x);
@@ -104,18 +103,18 @@
 		/* Unsigned complains about 2**NBITS? */
 		y = PyLong_FromLong((long)NBITS);
 		if (y == NULL)
-			return F_ERROR(
+			return error(
 				"unexpected NULL from PyLong_FromLong");
 
 		x = PyNumber_Lshift(one, y); /* 1L << NBITS, == 2**NBITS */
 		UNBIND(y);
 		if (x == NULL)
-			return F_ERROR(
+			return error(
 				"unexpected NULL from PyNumber_Lshift");
 
   		uout = F_PY_TO_U(x);
 		if (uout != (unsigned TYPENAME)-1 || !PyErr_Occurred())
-			return F_ERROR(
+			return error(
 				"PyLong_AsUnsignedXXX(2**NBITS) didn't "
 				"complain");
 		PyErr_Clear();
@@ -125,12 +124,12 @@
 		y = PyNumber_Rshift(x, one); /* 2**(NBITS-1) */
 		UNBIND(x);
 		if (y == NULL)
-			return F_ERROR(
+			return error(
 				"unexpected NULL from PyNumber_Rshift");
 
 		out = F_PY_TO_S(y);
 		if (out != (TYPENAME)-1 || !PyErr_Occurred())
-			return F_ERROR(
+			return error(
 				"PyLong_AsXXX(2**(NBITS-1)) didn't "
 				"complain");
 		PyErr_Clear();
@@ -140,18 +139,18 @@
 		x = PyNumber_Negative(y);  /* -(2**(NBITS-1)) */
 		UNBIND(y);
 		if (x == NULL)
-			return F_ERROR(
+			return error(
 				"unexpected NULL from PyNumber_Negative");
 
 		y = PyNumber_Subtract(x, one); /* -(2**(NBITS-1))-1 */
 		UNBIND(x);
 		if (y == NULL)
-			return F_ERROR(
+			return error(
 				"unexpected NULL from PyNumber_Subtract");
 
 		out = F_PY_TO_S(y);
 		if (out != (TYPENAME)-1 || !PyErr_Occurred())
-			return F_ERROR(
+			return error(
 				"PyLong_AsXXX(-2**(NBITS-1)-1) didn't "
 				"complain");
 		PyErr_Clear();
