@@ -787,6 +787,7 @@ clone_combined_dict_keys(PyDictObject *orig)
787
787
assert (PyDict_Check (orig ));
788
788
assert (Py_TYPE (orig )-> tp_iter == (getiterfunc )dict_iter );
789
789
assert (orig -> ma_values == NULL );
790
+ assert (orig -> ma_keys != Py_EMPTY_KEYS );
790
791
assert (orig -> ma_keys -> dk_refcnt == 1 );
791
792
792
793
size_t keys_size = _PyDict_KeysSize (orig -> ma_keys );
@@ -1540,11 +1541,7 @@ dictresize(PyInterpreterState *interp, PyDictObject *mp,
1540
1541
#ifdef Py_REF_DEBUG
1541
1542
_Py_DecRefTotal (_PyInterpreterState_GET ());
1542
1543
#endif
1543
- if (oldkeys == Py_EMPTY_KEYS ) {
1544
- oldkeys -> dk_refcnt -- ;
1545
- assert (oldkeys -> dk_refcnt > 0 );
1546
- }
1547
- else {
1544
+ if (oldkeys != Py_EMPTY_KEYS ) {
1548
1545
assert (oldkeys -> dk_kind != DICT_KEYS_SPLIT );
1549
1546
assert (oldkeys -> dk_refcnt == 1 );
1550
1547
#if PyDict_MAXFREELIST > 0
@@ -2088,8 +2085,8 @@ PyDict_Clear(PyObject *op)
2088
2085
dictkeys_decref (interp , oldkeys );
2089
2086
}
2090
2087
else {
2091
- assert (oldkeys -> dk_refcnt == 1 );
2092
- dictkeys_decref (interp , oldkeys );
2088
+ assert (oldkeys -> dk_refcnt == 1 || oldkeys == Py_EMPTY_KEYS );
2089
+ dictkeys_decref (interp , oldkeys );
2093
2090
}
2094
2091
ASSERT_CONSISTENT (mp );
2095
2092
}
@@ -3573,7 +3570,7 @@ _PyDict_SizeOf(PyDictObject *mp)
3573
3570
}
3574
3571
/* If the dictionary is split, the keys portion is accounted-for
3575
3572
in the type object. */
3576
- if (mp -> ma_keys -> dk_refcnt == 1 ) {
3573
+ if (mp -> ma_keys -> dk_refcnt == 1 || mp -> ma_keys == Py_EMPTY_KEYS ) {
3577
3574
res += _PyDict_KeysSize (mp -> ma_keys );
3578
3575
}
3579
3576
assert (res <= (size_t )PY_SSIZE_T_MAX );
0 commit comments