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" です。念のためー