1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Avoid improper optimization of case statements mixed integer/rational/complex

Fixes [Bug #17857]
This commit is contained in:
Jeremy Evans 2021-05-12 15:06:12 -07:00
parent 11ae581a4a
commit 9ce29c94d8
Notes: git 2021-05-13 11:30:25 +09:00
2 changed files with 15 additions and 0 deletions

View file

@ -4537,6 +4537,9 @@ rb_node_case_when_optimizable_literal(const NODE *const node)
modf(RFLOAT_VALUE(v), &ival) == 0.0) { modf(RFLOAT_VALUE(v), &ival) == 0.0) {
return FIXABLE(ival) ? LONG2FIX((long)ival) : rb_dbl2big(ival); return FIXABLE(ival) ? LONG2FIX((long)ival) : rb_dbl2big(ival);
} }
if (RB_TYPE_P(v, T_RATIONAL) || RB_TYPE_P(v, T_COMPLEX)) {
return Qundef;
}
if (SYMBOL_P(v) || rb_obj_is_kind_of(v, rb_cNumeric)) { if (SYMBOL_P(v) || rb_obj_is_kind_of(v, rb_cNumeric)) {
return v; return v;
} }

View file

@ -102,6 +102,18 @@ class TestCase < Test::Unit::TestCase
else else
assert(false) assert(false)
end end
case 0
when 0r
assert(true)
else
assert(false)
end
case 0
when 0i
assert(true)
else
assert(false)
end
end end
def test_method_missing def test_method_missing