hsrchz.oが妖しいなら、-O1/-O2での挙動の違いを調べれば良いはずなのですが その辺の調査結果が上がっていないようなので調べました
amsad8のgcc-4.2.0では hsrchz() @ src/hsrch.f内の hsrchz = mod(abs(isum), HTMAX)+1の結果が -O1 と -O2で違います 例えば、 -O1 / -O2 $DUMMYLINE -> 10652 / -10650 (このときは、isum < 0でした)
さらに、 o 直前で、mod()を作用させる前の isumを writeすると挙動が変わる(-O2時) o amsad9のgcc-4.2.1で makeすると -O2でも問題は出ません ということなので、isum = INT_MINでは無いようなので、abs()が効いてないのか 大数に対するmod()が負になっているのか分りませんが、最適化オプションの 実装に関するコンパイラーのバグだと思われます
|