Allow temporary hashability for the __contains__ test.
(Requested by Alex Martelli.)
diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py
index c33461d..3203d51 100644
--- a/Lib/test/test_set.py
+++ b/Lib/test/test_set.py
@@ -35,6 +35,8 @@
         for c in self.letters:
             self.assertEqual(c in self.s, c in self.d)
         self.assertRaises(TypeError, self.s.__contains__, [[]])
+        s = self.thetype([frozenset(self.letters)])
+        self.assert_(self.thetype(self.letters) in s)
 
     def test_copy(self):
         dup = self.s.copy()
diff --git a/Objects/setobject.c b/Objects/setobject.c
index 88d5640..2d77c74 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -104,7 +104,23 @@
 static int
 set_contains(PySetObject *so, PyObject *key)
 {
-	return PySequence_Contains(so->data, key);
+	PyObject *olddict;
+	PySetObject *tmp;
+	int result;
+
+	result = PySequence_Contains(so->data, key);
+	if (result == -1 && PyType_IsSubtype(key->ob_type, &PySet_Type)) {
+		PyErr_Clear();
+		tmp = (PySetObject *)make_new_set(&PyFrozenSet_Type, NULL);
+		if (tmp == NULL)
+			return -1;
+		olddict = tmp->data;
+		tmp->data = ((PySetObject *)(key))->data;
+		result = PySequence_Contains(so->data, (PyObject *)tmp);
+		tmp->data = olddict;
+		Py_DECREF(tmp);
+	}
+	return result;
 }
 
 static PyObject *