clangのcatch-undefined-behaviorフラグについて質問があります。Cで書かれた大きなプロジェクトで試してみました。ある時点で、ユーザーから提供された整数値(i)が到着します。次に、次のコードを追加しました。
int arr[3]
arr[i] = 1234;
しかし、gdbを使用してコードを実行すると、変数iの値が4以上の場合にのみ停止します。したがって、値3をiに渡すと、停止せずに範囲外の配列にアクセスします。
これは-fcatch-undefined-behaviorの既知の制限ですか?または、アクセスがスタックフレームの外側にあるかどうかだけをチェックし、ローカルアレイの外側にはないかどうかをチェックしますか?
よろしくクリスチャン
PS:コンパイラ/リンカーとしてclang +llvm3.0を使用しています。ターゲットはx86です。プログラムは、WindowsXPボックスのxubuntu12.04仮想マシン内で実行されます。