Skip to content

Commit 8cf5c4d

Browse files
authored
gh-142908: Don't use DK_IS_UNICODE in interpreter (gh-142909)
`DK_IS_UNICODE()` includes split keys and we don't want to specialize on those accesses..
1 parent 49c3b0a commit 8cf5c4d

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
@@ -1844,7 +1844,7 @@ dummy_func(
18441844
DEOPT_IF(!PyDict_CheckExact(dict));
18451845
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
18461846
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
1847-
assert(DK_IS_UNICODE(keys));
1847+
assert(keys->dk_kind == DICT_KEYS_UNICODE);
18481848
}
18491849

18501850
op(_LOAD_GLOBAL_MODULE, (version/1, unused/1, index/1 -- res))
@@ -1853,7 +1853,7 @@ dummy_func(
18531853
DEOPT_IF(!PyDict_CheckExact(dict));
18541854
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
18551855
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
1856-
assert(DK_IS_UNICODE(keys));
1856+
assert(keys->dk_kind == DICT_KEYS_UNICODE);
18571857
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
18581858
assert(index < DK_SIZE(keys));
18591859
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
@@ -1873,7 +1873,7 @@ dummy_func(
18731873
DEOPT_IF(!PyDict_CheckExact(dict));
18741874
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
18751875
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
1876-
assert(DK_IS_UNICODE(keys));
1876+
assert(keys->dk_kind == DICT_KEYS_UNICODE);
18771877
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
18781878
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
18791879
DEOPT_IF(res_o == NULL);
@@ -2668,7 +2668,7 @@ dummy_func(
26682668
assert(PyDict_CheckExact((PyObject *)dict));
26692669
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
26702670
if (hint >= (size_t)dict->ma_keys->dk_nentries ||
2671-
!DK_IS_UNICODE(dict->ma_keys)) {
2671+
dict->ma_keys->dk_kind != DICT_KEYS_UNICODE) {
26722672
UNLOCK_OBJECT(dict);
26732673
DEOPT_IF(true);
26742674
}

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
@@ -1285,7 +1285,7 @@ specialize_load_global_lock_held(
12851285
goto fail;
12861286
}
12871287
PyDictKeysObject * globals_keys = ((PyDictObject *)globals)->ma_keys;
1288-
if (!DK_IS_UNICODE(globals_keys)) {
1288+
if (globals_keys->dk_kind != DICT_KEYS_UNICODE) {
12891289
SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT);
12901290
goto fail;
12911291
}
@@ -1320,7 +1320,7 @@ specialize_load_global_lock_held(
13201320
goto fail;
13211321
}
13221322
PyDictKeysObject * builtin_keys = ((PyDictObject *)builtins)->ma_keys;
1323-
if (!DK_IS_UNICODE(builtin_keys)) {
1323+
if (builtin_keys->dk_kind != DICT_KEYS_UNICODE) {
13241324
SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT);
13251325
goto fail;
13261326
}

0 commit comments

Comments
 (0)