aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenta Murata <mrkn@users.noreply.github.com>2020-09-16 19:27:16 +0900
committerGitHub <noreply@github.com>2020-09-16 19:27:16 +0900
commit68b5f14d536c1a81c63412a9f3701380c9bc116c (patch)
treecbd284825188b61e827fa070afa8384c0659dcb3
parent10290da54d04345587f63cb96ad833043e7f7f1c (diff)
downloadruby-68b5f14d536c1a81c63412a9f3701380c9bc116c.tar.gz
Fix assertion failed in Complex.polar without NDEBUG (#3551)
Fixes [Bug #17172].
-rw-r--r--complex.c8
-rw-r--r--test/ruby/test_complex.rb5
2 files changed, 13 insertions, 0 deletions
diff --git a/complex.c b/complex.c
index b8dd6169ae..4100fac082 100644
--- a/complex.c
+++ b/complex.c
@@ -732,6 +732,14 @@ nucomp_s_polar(int argc, VALUE *argv, VALUE klass)
nucomp_real_check(arg);
break;
}
+ if (RB_TYPE_P(abs, T_COMPLEX)) {
+ get_dat1(abs);
+ abs = dat->real;
+ }
+ if (RB_TYPE_P(arg, T_COMPLEX)) {
+ get_dat1(arg);
+ arg = dat->real;
+ }
return f_complex_polar(klass, abs, arg);
}
diff --git a/test/ruby/test_complex.rb b/test/ruby/test_complex.rb
index a4fe9d4232..a3a7546575 100644
--- a/test/ruby/test_complex.rb
+++ b/test/ruby/test_complex.rb
@@ -220,6 +220,11 @@ class Complex_Test < Test::Unit::TestCase
def test_polar
assert_equal([1,2], Complex.polar(1,2).polar)
assert_equal(Complex.polar(1.0, Math::PI * 2 / 3), Complex.polar(1, Math::PI * 2 / 3))
+
+ assert_in_out_err([], <<-'end;', ['OK'], [])
+ Complex.polar(1, Complex(1, 0))
+ puts :OK
+ end;
end
def test_uplus