From b49ae45b88d5b80ff9f8ff2acc748bf98aa700c6 Mon Sep 17 00:00:00 2001 From: Alan Wu Date: Fri, 18 Jul 2025 19:30:24 -0400 Subject: [PATCH] Remove dead post-hoc rehash check Hash#rehash checks whether the hash is iterating, and with VWA, RHASH_ST_TABLE() always returns the same thing for the same hash. RHASH_ST_TABLE(VALUE h) { return (st_table *)((uintptr_t)h + sizeof(struct RHash)); } So this check can never fail and raise an exception. Remove it. --- hash.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/hash.c b/hash.c index b144b18690..6eb2f69de7 100644 --- a/hash.c +++ b/hash.c @@ -1312,13 +1312,8 @@ hash_foreach_iter(st_data_t key, st_data_t value, st_data_t argp, int error) if (error) return ST_STOP; - st_table *tbl = RHASH_ST_TABLE(arg->hash); int status = (*arg->func)((VALUE)key, (VALUE)value, arg->arg); - if (RHASH_ST_TABLE(arg->hash) != tbl) { - rb_raise(rb_eRuntimeError, "rehash occurred during iteration"); - } - return hash_iter_status_check(status); }