Issue #11576: Fixed timedelta subtraction glitch on big timedelta values
diff --git a/Lib/datetime.py b/Lib/datetime.py
index 47e54ec..1ae7cb5 100644
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -485,7 +485,11 @@
 
     def __sub__(self, other):
         if isinstance(other, timedelta):
-            return self + -other
+            # for CPython compatibility, we cannot use
+            # our __class__ here, but need a real timedelta
+            return timedelta(self._days - other._days,
+                             self._seconds - other._seconds,
+                             self._microseconds - other._microseconds)
         return NotImplemented
 
     def __rsub__(self, other):
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index e9ceee6..38f3b8f 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -383,6 +383,12 @@
         for i in range(-10, 10):
             eq((i*us/-3)//us, round(i/-3))
 
+        # Issue #11576
+        eq(td(999999999, 86399, 999999) - td(999999999, 86399, 999998),
+           td(0, 0, 1))
+        eq(td(999999999, 1, 1) - td(999999999, 1, 0),
+           td(0, 0, 1))
+
     def test_disallowed_computations(self):
         a = timedelta(42)