summaryrefslogtreecommitdiff
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r--vm_insnhelper.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index d0f73ecf42..ea56ea4011 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -2739,9 +2739,11 @@ vm_caller_setup_keyword_hash(const struct rb_callinfo *ci, VALUE keyword_hash)
keyword_hash = rb_hash_dup(rb_to_hash_type(keyword_hash));
}
}
- else if (!IS_ARGS_KW_SPLAT_MUT(ci)) {
+ else if (!IS_ARGS_KW_SPLAT_MUT(ci) && !RHASH_EMPTY_P(keyword_hash)) {
/* Convert a hash keyword splat to a new hash unless
* a mutable keyword splat was passed.
+ * Skip allocating new hash for empty keyword splat, as empty
+ * keyword splat will be ignored by both callers.
*/
keyword_hash = rb_hash_dup(keyword_hash);
}