fortran66のブログ

fortran について書きます。

面白いバグ

http://www.fortran.bcs.org/2007/jubileeprog.php
Bugs I Have Known and Loved - Ron Bell, AWE Aldermaston
http://www.fortran.bcs.org/2007/jubilee/bugs.pdf



常数も変数のようにメモリー上に置かれ、かつ最適化すると共有されてしまいます。ところが、引数で常数を書き換えるようなサブルーチンに値が渡されると、共有されていた値も変わってしまって、色々面倒を起こします。
昔の FORTRAN では、同様にパラメータ文で定義した常数もサブルーチン側で書き換わります。

この仕様は昔引っかかっりました。配列とスカラーを区別するためにコロンをつけておいたらスピード低下、原因は部分配列ではコピーが作られることで、コロンがつくとたとえ全配列渡しであってもコピーが作られてしまうという罠でした。最近のコンパイラでは起きないような気がします。