1

-O2g++ 4.7.1 を使用したデバッグ ビルドでフラグが見つからないことが原因であることが判明した ICU のルールベースの Transliterator で問題が発生しています。リリース ビルドを実行したときは正常に動作していましたが (これには が含まれていました-O2)、デバッグ用にそのフラグを使用せずにプロジェクトをビルドすると、Transliteratorオブジェクトが正しく作成されませんでした。

Transliterator* t = Transliterator::createFromRules(id, rules, UTRANS_FORWARD, parseError, status);

最適化なしでtは、ヌル ポインターが割り当てられ、status32767 に設定されます。これはBOGUS UErrorCode、ICU を介して実行されると に変換されu_errorName()ます。

最初に試したのは、ビルドからデバッグ フラグを削除することでしたが、返さ-gれたものに違いはありませんでした。createFromRules()追加したときにのみ、オブジェクト-O2が作成されました。Transliterator

テストでは-O1、すべてが期待どおりに機能し、これが発生するだけ-O2であることが示されています。-O3-O0

なぜこれが当てはまるのか、誰かが説明できますか?

4

1 に答える 1

2

デバッグの有無にかかわらず、異なる結果が得られるべきではありません。ルールを含む小さなテスト ケースを作成し、ICU のバージョンと OS/プラットフォームを指定して、チケットを提出できますか? 4.7.1 は 2 か月前にリリースされました。コンパイラのバグ (ICU はそれらを見つけてきた長い歴史があります!!) または潜在的なバグである可能性があります。バグをこの質問にリンクしたり、その逆をリンクしたりできます。

于 2012-08-15T20:12:05.997 に答える