summaryrefslogtreecommitdiff
path: root/vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm.c')
-rw-r--r--vm.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/vm.c b/vm.c
index 69b41639f0..fe5f0806be 100644
--- a/vm.c
+++ b/vm.c
@@ -2174,7 +2174,9 @@ static int
kwmerge_i(VALUE key, VALUE value, VALUE hash)
{
if (!SYMBOL_P(key)) Check_Type(key, T_SYMBOL);
- st_update(RHASH_TBL(hash), key, kwmerge_ii, (st_data_t)value);
+ if (st_update(RHASH_TBL(hash), key, kwmerge_ii, (st_data_t)value) == 0) { /* !existing */
+ OBJ_WRITTEN(hash, Qundef, value);
+ }
return ST_CONTINUE;
}