Skip to content

Commit 954e948

Browse files
committed
gh-142908: Don't use DK_IS_UNICODE in interpreter
`DK_IS_UNICODE()` includes split keys and we don't want to specialize on those accesses..
1 parent 92243dc commit 954e948

File tree

4 files changed

+17
-17
lines changed

4 files changed

+17
-17
lines changed

Python/bytecodes.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1801,7 +1801,7 @@ dummy_func(
18011801
DEOPT_IF(!PyDict_CheckExact(dict));
18021802
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
18031803
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
1804-
assert(DK_IS_UNICODE(keys));
1804+
assert(keys->dk_kind == DICT_KEYS_UNICODE);
18051805
}
18061806

18071807
op(_LOAD_GLOBAL_MODULE, (version/1, unused/1, index/1 -- res))
@@ -1810,7 +1810,7 @@ dummy_func(
18101810
DEOPT_IF(!PyDict_CheckExact(dict));
18111811
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
18121812
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
1813-
assert(DK_IS_UNICODE(keys));
1813+
assert(keys->dk_kind == DICT_KEYS_UNICODE);
18141814
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
18151815
assert(index < DK_SIZE(keys));
18161816
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
@@ -1830,7 +1830,7 @@ dummy_func(
18301830
DEOPT_IF(!PyDict_CheckExact(dict));
18311831
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
18321832
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
1833-
assert(DK_IS_UNICODE(keys));
1833+
assert(keys->dk_kind == DICT_KEYS_UNICODE);
18341834
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
18351835
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
18361836
DEOPT_IF(res_o == NULL);
@@ -2612,7 +2612,7 @@ dummy_func(
26122612
assert(PyDict_CheckExact((PyObject *)dict));
26132613
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
26142614
if (hint >= (size_t)dict->ma_keys->dk_nentries ||
2615-
!DK_IS_UNICODE(dict->ma_keys)) {
2615+
dict->ma_keys->dk_kind != DICT_KEYS_UNICODE) {
26162616
UNLOCK_OBJECT(dict);
26172617
DEOPT_IF(true);
26182618
}

Python/executor_cases.c.h

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/generated_cases.c.h

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/specialize.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1280,7 +1280,7 @@ specialize_load_global_lock_held(
12801280
goto fail;
12811281
}
12821282
PyDictKeysObject * globals_keys = ((PyDictObject *)globals)->ma_keys;
1283-
if (!DK_IS_UNICODE(globals_keys)) {
1283+
if (globals_keys->dk_kind != DICT_KEYS_UNICODE) {
12841284
SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT);
12851285
goto fail;
12861286
}
@@ -1315,7 +1315,7 @@ specialize_load_global_lock_held(
13151315
goto fail;
13161316
}
13171317
PyDictKeysObject * builtin_keys = ((PyDictObject *)builtins)->ma_keys;
1318-
if (!DK_IS_UNICODE(builtin_keys)) {
1318+
if (builtin_keys->dk_kind != DICT_KEYS_UNICODE) {
13191319
SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT);
13201320
goto fail;
13211321
}

0 commit comments

Comments
 (0)