最適化で変数が削られる憂き目に遭った・・・。

DirectXMathのXMMatrixPerspectiveFovLHの第2引数に与える、画面のアスペクト比なんだけど、
直前で

float fAspect = VP.Width / VP.Height;

ってな感じで書いてたら、Debugモードだと正常に動作するのに、
Releaseモードだとクラッシュする。

とりあえず、コメントアウトしながら原因箇所を追跡したら、上記のアスペクト比算出箇所に行き着いたわけ。
試しにvolatile修飾子を付けてみたら正常に動作することになったから、
最適化で削られたことが判明したんだけど、これ、どういうときに発生するか知ってる?

今までコンパイラ(VC++)に裏切られたことが一切なくて、信頼しきってただけに、ちょっとショック・・・。
今回は小規模なテストプログラムだから大した影響はなかったんだけど、
大規模で複雑なの組んでるときにこういうのが出ると話がややこしくなって厄介だ。