aboutsummaryrefslogtreecommitdiffstats
path: root/vm_eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm_eval.c')
-rw-r--r--vm_eval.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/vm_eval.c b/vm_eval.c
index fc271415a6..285eb77773 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -383,6 +383,13 @@ check_funcall_missing(rb_execution_context_t *ec, VALUE klass, VALUE recv, ID mi
VALUE argbuf, *new_args = ALLOCV_N(VALUE, argbuf, argc+1);
new_args[0] = ID2SYM(mid);
+ #ifdef __GLIBC__
+ if (!argv) {
+ static const VALUE buf = Qfalse;
+ VM_ASSERT(argc == 0);
+ argv = &buf;
+ }
+ #endif
MEMCPY(new_args+1, argv, VALUE, argc);
ec->method_missing_reason = MISSING_NOENTRY;
args.ec = ec;
@@ -734,6 +741,13 @@ method_missing(VALUE obj, ID id, int argc, const VALUE *argv, enum method_missin
nargv = ALLOCV_N(VALUE, work, argc + 1);
nargv[0] = ID2SYM(id);
+ #ifdef __GLIBC__
+ if (!argv) {
+ static const VALUE buf = Qfalse;
+ VM_ASSERT(argc == 0);
+ argv = &buf;
+ }
+ #endif
MEMCPY(nargv + 1, argv, VALUE, argc);
++argc;
argv = nargv;