Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Lib/test/test_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,14 @@ class Model(metaclass=ModelBase):
with self.assertRaises(RuntimeWarning):
type("SouthPonies", (Model,), {})

def test_tuple_subclass_as_bases(self):
# gh-132176: it used to crash on using
# tuple subclass for as base classes.
class TupleSubclass(tuple): pass

typ = type("typ", TupleSubclass((int, object)), {})
self.assertEqual(typ.__bases__, (int, object))


class SimpleNamespaceTests(unittest.TestCase):

Expand Down
3 changes: 2 additions & 1 deletion Objects/typeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -497,10 +497,11 @@ _PyType_GetBases(PyTypeObject *self)
static inline void
set_tp_bases(PyTypeObject *self, PyObject *bases, int initial)
{
assert(PyTuple_CheckExact(bases));
assert(PyTuple_Check(bases));
if (self->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
// XXX tp_bases can probably be statically allocated for each
// static builtin type.
assert(PyTuple_CheckExact(bases));
assert(initial);
assert(self->tp_bases == NULL);
if (PyTuple_GET_SIZE(bases) == 0) {
Expand Down
Loading