by
Anonymous Coward
on 2013年03月25日 14時11分
(#2349575)
文脈がわからず間違ったことを言っていたらすみません。 >仕様の穴をどうにかしろって事 これは、C言語のということでしょうか? であれば、C言語の仕様として、「不定」であると規定されているので、不定なコードを書いている以上、どのように振る舞っても問題ないと思います。 他の方が引用しているように、 http://www.spec.org/cpu2006/Docs/faq.html#Run.05 [spec.org] SPEC にある > Although the code pattern does not follow the C99 standard (See section 6.5.6/8), it is at minimum arguable that the code fragment is compliant under the C89 standard. The original code as provided by the International Telecommunications Union contained the pattern. という見解が頓珍漢なわけで、GCC に非は一切ないと思います。
gccの初物は危なすぎっていうか… (スコア:-1)
リリースされるや否やSPEC 2006ベンチをコンパイルするとぶっ壊れたコード吐く [lwn.net]って騒ぎになってるのに、あえてそちらはスルーして
このタレコミ人が突っ込んだ-O3 -ffast-mathつけると結果が変わるぞゴラァ [gnu.org]とかいう話の方を取り上げて「バグもすぐ直してくれる」とか結んじゃうんだ…
凄えなこのタレコミ人・・・・・・・
某ドラッカーじゃないけど、もうちょっと真摯にタレコミしてくれないもんかね
# 「gccって-O3 -ffast-mathつけてビルドして結果が変わったらバグ扱いにしてくれるんだってよ」ってGentoo使いに教えてやりたいね(笑)
Re: (スコア:0)
Fortranは規格違反のコード書いたら鼻から悪魔が出てもいいなんて頭おかしい仕様じゃないから(むしろそんなのはC/C++くらいだろ)。
Re: (スコア:0)
そこまで解析して最適化するなら、もうちょっと先まで解析してよとは思いますね
※昔は無意味なループ削除とかやらなかったのに…ストールマン曰く「プログラマーは無意味なループを書かない」、今回の最適化はここからかけ離れてますね
Re: (スコア:0)
ループは削除してないし
while (1) {
f();
if (p()) break;
g();
}
みたいなコードで毎回1と0を比べて欲しいのかい
Re: (スコア:0)
ループ削除は例です
現実的にwhile(1)じゃないコードをwhile(1)扱いしてるのが問題なわけで
Re: (スコア:1)
規格に則っていない以上、どう解釈されても文句は言えないでしょ。
GCCは、配列a[n]のn番目のアクセスしなくていいよう辻褄を合わせただけ。n番目にアクセスしないならi<nの判定式は必要ない。
プログラマーは、別の方法でループを抜ける方法を実装できるわけだし、実際している場合もある、その場合判定は2つも要らない。。
Re: (スコア:0)
フェイルセーフにしなかったって事ですね
まあ仕様の穴をどうにかしろって事なんでしょうが、穴のない仕様を作るも結構たいへんですし
実装者の趣味・趣向が問われるところですね
プログラマが不正なアクセスしない事を把握した上でコードを簡易化するために配列を「1」オーバーするコードを書く場合もあると思いますが
Re:gccの初物は危なすぎっていうか… (スコア:0)
文脈がわからず間違ったことを言っていたらすみません。
>仕様の穴をどうにかしろって事
これは、C言語のということでしょうか?
であれば、C言語の仕様として、「不定」であると規定されているので、不定なコードを書いている以上、どのように振る舞っても問題ないと思います。
他の方が引用しているように、 http://www.spec.org/cpu2006/Docs/faq.html#Run.05 [spec.org] SPEC にある
> Although the code pattern does not follow the C99 standard (See section 6.5.6/8), it is at minimum arguable that the code fragment is compliant under the C89 standard. The original code as provided by the International Telecommunications Union contained the pattern.
という見解が頓珍漢なわけで、GCC に非は一切ないと思います。