Reset errno before both calls to PyOS_ascii_strtod, not just one.
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index d1e9e92..ecf70da 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -911,8 +911,6 @@
 		return NULL;
 	}
 
-	errno = 0;
-
 	/* position on first nonblank */
 	start = s;
 	while (*s && isspace(Py_CHARMASK(*s)))
@@ -947,6 +945,7 @@
 	*/
 
 	/* first look for forms starting with <float> */
+	errno = 0;
 	z = PyOS_ascii_strtod(s, &end);
 	if (end == s && errno == ENOMEM)
 		return PyErr_NoMemory();
@@ -959,6 +958,7 @@
 		if (*s == '+' || *s == '-') {
 			/* <float><signed-float>j | <float><sign>j */
 			x = z;
+			errno = 0;
 			y = PyOS_ascii_strtod(s, &end);
 			if (end == s && errno == ENOMEM)
 				return PyErr_NoMemory();