From: normalperson@... Date: 2015-01-07T21:48:35+00:00 Subject: [ruby-core:67409] [ruby-trunk - Bug #10711] Incorrect error message in coerce failed Issue #10711 has been updated by Eric Wong. do_coerce modifies x, so stashing the original before seems to fix the problem. Maybe I missed something else. Lightly-tested patch: --- a/numeric.c +++ b/numeric.c @@ -3426,10 +3426,11 @@ static int bit_coerce(VALUE *x, VALUE *y) { if (!FIXNUM_P(*y) && !RB_TYPE_P(*y, T_BIGNUM)) { + VALUE orig = *x; do_coerce(x, y, TRUE); if (!FIXNUM_P(*x) && !RB_TYPE_P(*x, T_BIGNUM) && !FIXNUM_P(*y) && !RB_TYPE_P(*y, T_BIGNUM)) { - coerce_failed(*x, *y); + coerce_failed(orig, *y); } } return TRUE; ---------------------------------------- Bug #10711: Incorrect error message in coerce failed https://bugs.ruby-lang.org/issues/10711#change-50842 * Author: Chris Seaton * Status: Open * Priority: Low * Assignee: * Category: * Target version: * ruby -v: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- ~~~ $ ruby -v -e '1 & 1.2' ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14] -e:1: warning: possibly useless use of & in void context -e:1:in `&': 1.2 can't be coerced into Float (TypeError) from -e:1:in `
' ~~~ It's telling me it couldn't coerce a Float into a Float, when it probably means into an Integer (or maybe Fixnum?). I looked at the C, but couldn't see where the problem is. coerce_failed seems to use the correct value to get the class for the error so must be something before there. -- https://bugs.ruby-lang.org/