ごとけんです

手元に SunOS 4.1.4 をお持ちの方はこのメールの最後に
つけたことが再現するか調べていただけませんか??

In message "[ruby-dev:4692] Re: Ruby 1.3.1-990203"
    on 99/02/04, Yukihiro Matsumoto <matz / netlab.co.jp> writes:

>まつもと ゆきひろです

>|  * make test が終りません。sleep で止まっているようです。
>|    実は 990201 からです。テストさぼってました (_ _;
>
>これ重要な問題ですね.当然と言えば当然なのですがlinuxではちゃ
>んと動いています.990201近辺にsleepの挙動に影響ありそうな変
>更をしていないだけに謎です.

理由が分かりました。僕の近所だけかも知れませんが、

  % uname -mrs
  SunOS 4.1.4 sun4m

では、strtod() がちゃんと機能していないらしく、
[ruby-dev:4544] のパッチで、float リテラルが正しく読め
なくなったため test.rb 中の "splee 0.1" の 0.1 が
死ぬ程デカく評価されてました。

よそでもこの不具合が再現するようでしたら、

  * 少なくとも SunOS 4.1.4 では parse.y での strtod() による
    範囲チェックをハズすか
  * configure で正当性を検査して、missing/strtod.c を置く

のが適切かと思われます。

なお、SunOS 5.6 ではこの問題はありません。

>|# なんか僕のせいで安定しない気がとてもするので
>|# ヒジョーに申し訳ないです (_ _; (_ _; (_ _;
>
>そのためのテストバージョンですから.

かたじけない…

-- gotoken


% cat strtod.c #include <stdio.h> #include <stdlib.h> #include <string.h> main() { char buf[8]; strcpy(buf,"0.1"); printf("\"%s\" => %e\n", buf, atof(buf)); printf("\"%s\" => %e\n", buf, strtod(buf,(char **)NULL)); } % cc strtod.c -o strtod && ./strtod 0.1 0.2 "0.1" => 1.000000e-01 "0.1" => -3.102159e+231 % ldd ./strtod -lc.1 => /usr/lib/libc.so.1.9 -ldl.1 => /usr/lib/libdl.so.1.0 %