aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authormlugg <mlugg@mlugg.co.uk>2024-12-25 21:23:46 +0000
committerMatthew Lugg <mlugg@mlugg.co.uk>2024-12-26 02:19:02 +0000
commit42dac40b3feeabe39b5f191d1e72d247327133ba (patch)
tree1839a029e92e2fe818334e54bf0946ec73b1717b /lib/std
parent497592c9b45a94fb7b6028bf45b80f183e395a9b (diff)
downloadzig-42dac40b3feeabe39b5f191d1e72d247327133ba.tar.gz
zig-42dac40b3feeabe39b5f191d1e72d247327133ba.zip
InternPool: fix segfault in `rehashTrackedInsts`
The `.empty` map in a shard is weird: it claims to have capacity 1, but you're not actually allowed to actually use that capacity. That's fine for the normal insertion algorithm, because it always resizes to a higher capacity when inserting the initial element. However, `rehashTrackedInsts` was not aware of this caveat, so sometimes tried to store to the single element of the `empty` map. This system exists to avoid an extra branch in the main resizing logic (since `new_cap = old_cap * 2` only works if the capacity is never non-zero). However, it's fine for `rehashTrackedInsts` to have an extra branch to handle this case, since it's literally called once per update.
Diffstat (limited to 'lib/std')
0 files changed, 0 insertions, 0 deletions