Project

General

Profile

Bug #10711

Incorrect error message in coerce failed

Added by chrisseaton (Chris Seaton) over 5 years ago. Updated almost 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]
[ruby-core:67405]

Description

$ 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 `<main>'

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.

Updated by normalperson (Eric Wong) over 5 years ago

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;
#2

Updated by Anonymous over 5 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

Applied in changeset r49224.


numeric.c: correct error message when coerce fails

  • numeric.c (bit_coerce): use original value for error message [ruby-core:67405] [Bug #10711]
  • test/ruby/test_numeric.rb (test_coerce): check error message

Updated by usa (Usaku NAKAMURA) over 5 years ago

  • Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN to 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED

memo: see also [ruby-core:67555], [ruby-core:67557], r49234 and r49235.

Updated by naruse (Yui NARUSE) over 5 years ago

  • Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED to 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: DONE

ruby_2_2 r49313 merged revision(s) 49224,49234,49235.

Updated by usa (Usaku NAKAMURA) over 5 years ago

  • Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: DONE to 2.0.0: DONE, 2.1: REQUIRED, 2.2: DONE

ruby_2_0_0 r49443 merged revision(s) 49224,49225,49234,49235.

Updated by usa (Usaku NAKAMURA) almost 5 years ago

  • Backport changed from 2.0.0: DONE, 2.1: REQUIRED, 2.2: DONE to 2.0.0: DONE, 2.1: DONE, 2.2: DONE

ruby_2_1 r51067 merged revision(s) 49224,49225,49234,49235.

Also available in: Atom PDF