[#23332] to_str再考 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

15 messages 2004/04/05

[#23380] [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

17 messages 2004/04/15
[#23400] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。落ちる場所がわかりました。

[#23402] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23403] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — nobu.nakada@... 2004/04/16

なかだです。

[#23405] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23407] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[ruby-dev:23313] Re: 100000000000000000000000 == 100000000000000000000000.0

From: Tanaka Akira <akr@...17n.org>
Date: 2004-04-02 06:16:58 UTC
List: ruby-dev #23313
In article <1080886208.289638.30919.nullmailer@picachu.netlab.jp>,
  matz@ruby-lang.org (Yukihiro Matsumoto) writes:

> gccのバージョンとかによるのかもしれません。

% gcc -v
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
gcc version 2.95.4 20011002 (Debian prerelease)

古いのがいけない、のかな?

> これはつまりrb_big2dbl()の戻り値を一度変数に格納してしまえば
> 問題ないってことですかね。

volatile な変数を通せば解決するようですね。

Index: bignum.c
===================================================================
RCS file: /src/ruby/bignum.c,v
retrieving revision 1.104
diff -u -r1.104 bignum.c
--- bignum.c	15 Mar 2004 02:27:29 -0000	1.104
+++ bignum.c	2 Apr 2004 06:15:27 -0000
@@ -978,10 +978,13 @@
       case T_BIGNUM:
 	break;
       case T_FLOAT:
-	if (rb_big2dbl(x) == RFLOAT(y)->value)
-	    return Qtrue;
-	else
-	    return Qfalse;
+      {
+          volatile double v = rb_big2dbl(x);
+          if (v == RFLOAT(y)->value)
+              return Qtrue;
+          else
+              return Qfalse;
+      }
       default:
 	return rb_equal(y, x);
     }
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next