def METHOD_NAME():
    # Test taken from CPython's test_desc, but modified to use non-slot attributes,
    # which are also interesting on GraalPython in combination with MRO shapes.
    class A(object):
        pass
    class B(A):
        pass
    class C(A):
        pass
    class D(B, C):
        pass
    def assert_hash_raises_type_error(x):
        try:
            call_hash(x)
        except TypeError as e:
            pass
        else:
            assert False
    # This will make the call monomorphic
    def call_hash(x):
        return x.myhash()
    for i in range(1,3):
        d = D()
        A.myhash = lambda self: 42
        assert call_hash(d) == 42
        C.myhash = lambda self: 314
        assert call_hash(d) == 314
        B.myhash = lambda self: 144
        assert call_hash(d) == 144
        D.myhash = lambda self: 100
        assert call_hash(d) == 100
        D.myhash = None
        assert_hash_raises_type_error(d)
        del D.myhash
        assert call_hash(d) == 144
        B.myhash = None
        assert_hash_raises_type_error(d)
        del B.myhash
        assert call_hash(d) == 314
        C.myhash = None
        assert_hash_raises_type_error(d)
        del C.myhash
        assert call_hash(d) == 42
        A.myhash = None
        assert_hash_raises_type_error(d)