-O2
g++ 4.7.1 を使用したデバッグ ビルドでフラグが見つからないことが原因であることが判明した ICU のルールベースの Transliterator で問題が発生しています。リリース ビルドを実行したときは正常に動作していましたが (これには が含まれていました-O2
)、デバッグ用にそのフラグを使用せずにプロジェクトをビルドすると、Transliterator
オブジェクトが正しく作成されませんでした。
Transliterator* t = Transliterator::createFromRules(id, rules, UTRANS_FORWARD, parseError, status);
最適化なしでt
は、ヌル ポインターが割り当てられ、status
32767 に設定されます。これはBOGUS UErrorCode
、ICU を介して実行されると に変換されu_errorName()
ます。
最初に試したのは、ビルドからデバッグ フラグを削除することでしたが、返さ-g
れたものに違いはありませんでした。createFromRules()
追加したときにのみ、オブジェクト-O2
が作成されました。Transliterator
テストでは-O1
、すべてが期待どおりに機能し、これが発生するだけ-O2
であることが示されています。-O3
-O0
なぜこれが当てはまるのか、誰かが説明できますか?