diff --git a/Doc/c-api/long.rst b/Doc/c-api/long.rst
index a7fe4b5..a8dc3ec 100644
--- a/Doc/c-api/long.rst
+++ b/Doc/c-api/long.rst
@@ -168,17 +168,26 @@
 
 .. cfunction:: PY_LONG_LONG PyLong_AsLongLong(PyObject *pylong)
 
-   Return a C :ctype:`long long` from a Python integer.  If *pylong* cannot be
-   represented as a :ctype:`long long`, an :exc:`OverflowError` will be raised.
+   .. index::
+      single: OverflowError (built-in exception)
 
+   Return a C :ctype:`long long` from a Python integer.  If *pylong*
+   cannot be represented as a :ctype:`long long`, an
+   :exc:`OverflowError` is raised and ``-1`` is returned.
 
 .. cfunction:: unsigned PY_LONG_LONG PyLong_AsUnsignedLongLong(PyObject *pylong)
 
-   Return a C :ctype:`unsigned long long` from a Python integer. If *pylong*
-   cannot be represented as an :ctype:`unsigned long long`, an :exc:`OverflowError`
-   will be raised if the value is positive, or a :exc:`TypeError` will be raised if
-   the value is negative.
+   .. index::
+      single: OverflowError (built-in exception)
 
+   Return a C :ctype:`unsigned long long` from a Python integer. If
+   *pylong* cannot be represented as an :ctype:`unsigned long long`,
+   an :exc:`OverflowError` is raised and ``(unsigned long long)-1`` is
+   returned.
+
+   .. versionchanged:: 3.1
+      A negative *pylong* now raises :exc:`OverflowError`, not
+      :exc:`TypeError`.
 
 .. cfunction:: unsigned long PyLong_AsUnsignedLongMask(PyObject *io)
 
diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py
index bdbc397..2bc92f3 100644
--- a/Lib/test/test_struct.py
+++ b/Lib/test/test_struct.py
@@ -48,7 +48,7 @@
 def deprecated_err(func, *args):
     try:
         func(*args)
-    except (struct.error, TypeError):
+    except (struct.error, OverflowError):
         pass
     except DeprecationWarning:
         if not PY_STRUCT_OVERFLOW_MASKING:
@@ -191,7 +191,7 @@
 
     def test_native_qQ(self):
         # can't pack -1 as unsigned regardless
-        self.assertRaises((struct.error, TypeError), struct.pack, "Q", -1)
+        self.assertRaises((struct.error, OverflowError), struct.pack, "Q", -1)
         # can't pack string as 'q' regardless
         self.assertRaises(struct.error, struct.pack, "q", "a")
         # ditto, but 'Q'
diff --git a/Misc/ACKS b/Misc/ACKS
index 31f920e..669c4e0 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -152,6 +152,7 @@
 Drew Csillag
 John Cugini
 Tom Culliton
+Lisandro Dalcin
 Andrew Dalke
 Lars Damerow
 Eric Daniel
diff --git a/Misc/NEWS b/Misc/NEWS
index 5970332..44a893f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -467,6 +467,9 @@
 C-API
 -----
 
+- Issue #5175: PyLong_AsUnsignedLongLong now raises OverflowError
+  for negative arguments.  Previously, it raised TypeError.
+
 - Issue #4720: The format for PyArg_ParseTupleAndKeywords can begin with '|'.
 
 - Issue #3632: from the gdb debugger, the 'pyo' macro can now be called when
diff --git a/Modules/testcapi_long.h b/Modules/testcapi_long.h
index 8ed6b02..60ca326 100644
--- a/Modules/testcapi_long.h
+++ b/Modules/testcapi_long.h
@@ -97,6 +97,10 @@
 		if (uout != (unsigned TYPENAME)-1 || !PyErr_Occurred())
 			return error(
 				"PyLong_AsUnsignedXXX(-1) didn't complain");
+		if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+			return error(
+				"PyLong_AsUnsignedXXX(-1) raised "
+				"something other than OverflowError");
 		PyErr_Clear();
 		UNBIND(x);
 
@@ -112,11 +116,15 @@
 			return error(
 				"unexpected NULL from PyNumber_Lshift");
 
-  		uout = F_PY_TO_U(x);
+		uout = F_PY_TO_U(x);
 		if (uout != (unsigned TYPENAME)-1 || !PyErr_Occurred())
 			return error(
 				"PyLong_AsUnsignedXXX(2**NBITS) didn't "
 				"complain");
+		if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+			return error(
+				"PyLong_AsUnsignedXXX(2**NBITS) raised "
+				"something other than OverflowError");
 		PyErr_Clear();
 
 		/* Signed complains about 2**(NBITS-1)?
@@ -132,6 +140,10 @@
 			return error(
 				"PyLong_AsXXX(2**(NBITS-1)) didn't "
 				"complain");
+		if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+			return error(
+				"PyLong_AsXXX(2**(NBITS-1)) raised "
+				"something other than OverflowError");
 		PyErr_Clear();
 
 		/* Signed complains about -2**(NBITS-1)-1?;
@@ -153,6 +165,10 @@
 			return error(
 				"PyLong_AsXXX(-2**(NBITS-1)-1) didn't "
 				"complain");
+		if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+			return error(
+				"PyLong_AsXXX(-2**(NBITS-1)-1) raised "
+				"something other than OverflowError");
 		PyErr_Clear();
 		UNBIND(y);
 
diff --git a/Objects/longobject.c b/Objects/longobject.c
index e8d315d..e2ab078 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -786,7 +786,7 @@
 	if (Py_SIZE(v) < 0) {
 		ndigits = -(Py_SIZE(v));
 		if (!is_signed) {
-			PyErr_SetString(PyExc_TypeError,
+			PyErr_SetString(PyExc_OverflowError,
 				"can't convert negative int to unsigned");
 			return -1;
 		}
