From 36a74b994d896ddad5590cd8dd89fa4193c03cff Mon Sep 17 00:00:00 2001 From: Neil Schemenauer Date: Mon, 28 Apr 2025 19:21:47 -0700 Subject: [PATCH] Fix for test_type_lookup_mro_reference. Change the unit test case to use `getattr()` so that we avoid the bytecode specializer optimizing the access. The specializer will call the `__eq__` method before the unit test expects, causing it to fail. In the 3.14 branch (gh-128164) the test is changed in a different way to avoid the same issue. --- Lib/test/test_descr.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index f5f8931a046b81..ebea459f1ac6b7 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -5177,10 +5177,15 @@ class Base2(object): with self.assertWarnsRegex(RuntimeWarning, 'X'): X = type('X', (Base,), {MyKey(): 5}) + + # Note that the access below uses getattr() rather than normally + # accessing the attribute. That is done to avoid the bytecode + # specializer activating on repeated runs of the test. + # mykey is read from Base - self.assertEqual(X.mykey, 'from Base') + self.assertEqual(getattr(X, 'mykey'), 'from Base') # mykey2 is read from Base2 because MyKey.__eq__ has set __bases__ - self.assertEqual(X.mykey2, 'from Base2') + self.assertEqual(getattr(X, 'mykey2'), 'from Base2') class PicklingTests(unittest.TestCase):