Visual Studio 2005 の 64bit コンパイラの最適化にはバグがあるっぽい?
32bit のリリースビルドは動くのに、64bitのリリースビルドしたものがどうしても落ちるので、あれやこれやと実験していたのですが……
どーも最適化にバグがあるっぽい事が判明。擬似コードになりますが…
const int g_anArray[10] = { ... }; int ConvertCode(int n) // 負数がくる { return anArray[n - INT_MIN]; } int OtherFunc() { : int nResult = Kanaria(); if(nResult < 0) return ConvertCode(nResult); // 落ちる }
こんなコードを最適化つきでビルドすると、不正なコードをはいてしまうようです。 ちなみになんでコンパイラのバグと断言できるかというと
const int g_anArray[10] = { ... }; int ConvertCode(int n) { const int nTmp = n - INT_MIN; retrun anArray[nTmp]; } int OtherFunc() { : int nResult = Kanaria(); if(nResult < 0) return ConvertCode(nResult); // OK }
変数1個かましたら正常に動いてくれるからですな!
………返せ…! 俺の2日間を返せぇぇぇぇぇぇーーーーーーーーーーーーーーーーー!!!
…ちっくしょう薔薇水晶め……(涙 orz
今はコミケ前の修羅場なので、具体的にアセンブラコードは追ってられませんが、来週あたりチト検証してみようかしらー。
ちなみに、コンパイラバージョンは "14.00.50727.42" です。念のためー