Check the return code for PyErr_Warn() when warning about raising string
exceptions.  This was triggered when 'warnings' had a filter set to "error"
that caught the string exception deprecation warning.
diff --git a/Misc/NEWS b/Misc/NEWS
index 4e16038..3ad50b5 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@
 Core and builtins
 -----------------
 
+- Properly check if 'warnings' raises an exception (usually when a filter set
+  to "error" is triggered) when raising a warning for raising string
+  exceptions.
+
 - CO_GENERATOR_ALLOWED is no longer defined, this behavior is the default.
   The name was removed from Include/code.h.
 
diff --git a/Python/ceval.c b/Python/ceval.c
index e2f38ac..2c2104e 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2997,13 +2997,14 @@
 		Py_DECREF(tmp);
 	}
 
-	if (PyString_CheckExact(type))
+	if (PyString_CheckExact(type)) {
 		/* Raising builtin string is deprecated but still allowed --
 		 * do nothing.  Raising an instance of a new-style str
 		 * subclass is right out. */
-		PyErr_Warn(PyExc_PendingDeprecationWarning,
-			   "raising a string exception is deprecated");
-
+		if (-1 == PyErr_Warn(PyExc_PendingDeprecationWarning,
+			   "raising a string exception is deprecated"))
+			goto raise_error;
+	}
 	else if (PyClass_Check(type))
 		PyErr_NormalizeException(&type, &value, &tb);