未定義動作
ある操作を未定義動作として文書化することにより、コンパイラは、そのような操作が仕様に準拠したプログラムでは絶対に発生しないと想定することができる。これにより、コンパイラはコードに関するより多くの情報を得ることができ、この情報によってより踏み込んだ最適化を行うことができる可能性がある。
C言語での例:
xは符号なし整数であるため負になることはない。よって、符号付き整数型のオーバーフローがCでの未定義の動作であることを踏まえると、コンパイラはvalue < 2147483600の条件が常に偽であると仮定できる。したがって、if文の条件節は副作用を持たず、かつその条件が必ず満たされないため、コンパイラはif文とそれに含まれるbar関数の呼び出しを無視することができる。つまり、このコードは意味的には次のものと同等である。
もしも符号付き整数型のオーバーフローにラップアラウンド動作(オーバーフローした値が一周してもとに戻る)があると規定されている場合、上記の変換は正当ではなくなる。
コードがさらに複雑だったり、インライン化など他の最適化が行われたりすると、このような最適化は見つけるのが難しくなる。たとえば、別の関数が上記の関数を次のように呼び出した場合、
foo()関数を検査すると、ptrxが指す初期値が47を超えることはないことが保証されることがわかる(それ以上の値はfoo()関数で未定義動作を引き起こすため)。