toge's diary

コンピュータ関連の趣味をつらつらと。

radix sortがgcc 4.xでsegmentation faultする件

id:toge:20060727#1154020692

7/27に嵌ってたことの原因が判明。まあ、あれだ、変なことするなら"-Wall"はつけろってことだ。

warning: dereferencing type-punned pointer will break strict-aliasing rules

というwarningが出てたのね。さて"strict-aliasing"は"-O2"で有効になる"-fstrict-aliasing"のこと。
ということで、このwarningが出ているオブジェクトだけ"-fno-strict-aliasing"を指定すると・・・、gcc 4.x系でも問題なくなりました。

以下の参考資料によると、gcc 3.xで動いていたのもたまたまだったみたいだ。危い危い。

"strict aliasing rule"(http://www.radiumsoftware.com/0304.html)
"type punning と strict aliasing"(id:yupo5656:20040614:p1)

ちなみに、共用体を使えばwarningは無くなりましたが、segmentation faultすることに変わりはなかったです。

しかし"-fstrict-aliasing"なqsortと"-fno-strict-aliasing"なradix sortはどっちが速いんだろうなぁ。