$ ./ruby19 -ve "def foo(a, x, y, *b); end; p method(:foo).to_proc.arity"
ruby 1.9.0 (2007-04-26 patchlevel 0) [i686-linux]
-1

when it should resemble

$ ruby185-p12 -ve "def foo(a, x, y, *b); end; p method(:foo).to_proc.arity"
ruby 1.8.5 (2006-12-25 patchlevel 12) [i686-linux]
-4

The bug is distinct from the one in [ruby-core:11029] and predates it.

The comment in the function is very telling:

static VALUE
method_proc(VALUE method)
{
    VALUE proc;
    /*
     * class Method
     *   def to_proc
     *     proc{|*args|
     *       self.call(*args)
     *     }
     *   end
     * end
     */
    proc = rb_iterate((VALUE (*)(VALUE))mproc, 0, bmcall, method);
    return proc;
}


In proc_arity, the second branch is being followed:

    if (iseq && BUILTIN_TYPE(iseq) != T_NODE) {
	if (iseq->arg_rest == 0 && iseq->arg_opts == 0) {
	    return INT2FIX(iseq->argc);
	}
	else {
	    return INT2FIX(-iseq->argc - 1);
	}
    }
    else {
	return INT2FIX(-1);
    }

-- 
Mauricio Fernandez  -   http://eigenclass.org   -  singular Ruby
                        ** Latest postings **
On GC and finalizers in Ruby, corrected weak hash table implementations
  http://eigenclass.org/hiki/deferred-finalizers-in-Ruby
simplefold: better vim folding (Ruby, Objective Caml, Perl, PHP, Java)
  http://eigenclass.org/hiki/simplefold