properly lookup __instancecheck__ and __subclasscheck__
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index e66b550..f3c216a 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -1683,16 +1683,25 @@
             return 0
         def stop(self):
             raise StopIteration
+        def return_true(self, thing=None):
+            return True
+        def do_isinstance(obj):
+            return isinstance(int, obj)
+        def do_issubclass(obj):
+            return issubclass(int, obj)
 
         # It would be nice to have every special method tested here, but I'm
         # only listing the ones I can remember outside of typeobject.c, since it
         # does it right.
         specials = [
-            ("__unicode__", unicode, hello, {}),
-            ("__reversed__", reversed, empty_seq, {}),
-            ("__length_hint__", list, zero,
+            ("__unicode__", unicode, hello, set(), {}),
+            ("__reversed__", reversed, empty_seq, set(), {}),
+            ("__length_hint__", list, zero, set(),
              {"__iter__" : iden, "next" : stop}),
-            ("__sizeof__", sys.getsizeof, zero, {}),
+            ("__sizeof__", sys.getsizeof, zero, set(), {}),
+            ("__instancecheck__", do_isinstance, return_true, set(), {}),
+            ("__subclasscheck__", do_issubclass, return_true,
+             set(("__bases__",)), {}),
             # These two fail because the compiler generates LOAD_ATTR to look
             # them up.  We'd have to add a new opcode to fix this, and it's
             # probably not worth it.
@@ -1704,7 +1713,9 @@
             def __getattr__(self, attr, test=self):
                 test.fail("__getattr__ called with {0}".format(attr))
             def __getattribute__(self, attr, test=self):
-                test.fail("__getattribute__ called with {0}".format(attr))
+                if attr not in ok:
+                    test.fail("__getattribute__ called with {0}".format(attr))
+                return object.__getattribute__(attr)
         class SpecialDescr(object):
             def __init__(self, impl):
                 self.impl = impl
@@ -1713,7 +1724,7 @@
                 return self.impl.__get__(obj, owner)
 
 
-        for name, runner, meth_impl, env in specials:
+        for name, runner, meth_impl, ok, env in specials:
             class X(Checker):
                 pass
             for attr, obj in env.iteritems():