Turns out there wasn't a need to define tp_free for any of the types here.
diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c
index 66fb355..d25eb70 100644
--- a/Modules/datetimemodule.c
+++ b/Modules/datetimemodule.c
@@ -2117,7 +2117,7 @@
 	0,						/* tp_init */
 	0,						/* tp_alloc */
 	delta_new,					/* tp_new */
-	PyObject_Del,					/* tp_free */
+	0,						/* tp_free */
 };
 
 /*
@@ -2670,7 +2670,7 @@
 	0,						/* tp_init */
 	0,						/* tp_alloc */
 	date_new,					/* tp_new */
-	PyObject_Del,					/* tp_free */
+	0,						/* tp_free */
 };
 
 /*
@@ -3441,7 +3441,7 @@
 	0,					/* tp_init */
 	0,					/* tp_alloc */
 	time_new,				/* tp_new */
-	PyObject_Del,				/* tp_free */
+	0,					/* tp_free */
 };
 
 /*
@@ -4462,7 +4462,7 @@
 	0,					/* tp_init */
 	0,					/* tp_alloc */
 	datetime_new,				/* tp_new */
-	PyObject_Del,				/* tp_free */
+	0,					/* tp_free */
 };
 
 /* ---------------------------------------------------------------------------