From a3ddde4187e280fc256adfd17d0fe80bd316fa36 Mon Sep 17 00:00:00 2001 From: Dino Viehland Date: Mon, 20 Oct 2025 14:13:57 -0700 Subject: [PATCH] Fix specialization of load global --- Python/specialize.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Python/specialize.c b/Python/specialize.c index 47a55f2862e..fc929662cdc 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -803,7 +803,7 @@ specialize_module_load_attr_lock_held(PyDictObject *dict, _Py_CODEUNIT *instr, P if (PyDict_GetItemRef((PyObject *)dict, name, &value) < 0 || (value != NULL && PyLazyImport_CheckExact(value))) { Py_XDECREF(value); - SPECIALIZATION_FAIL(SPEC_FAIL_ATTR_MODULE_LAZY_VALUE, SPEC_FAIL_OUT_OF_VERSIONS); + SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_MODULE_LAZY_VALUE); return -1; } Py_XDECREF(value); @@ -1707,6 +1707,13 @@ specialize_load_global_lock_held( SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT); goto fail; } + PyObject *value = NULL; + if (PyDict_GetItemRef(globals, name, &value) < 0 || + (value != NULL && PyLazyImport_CheckExact(value))) { + SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_ATTR_MODULE_LAZY_VALUE); + Py_DECREF(value); + } + Py_XDECREF(value); Py_ssize_t index = _PyDictKeys_StringLookup(globals_keys, name); if (index == DKIX_ERROR) { SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_EXPECTED_ERROR);