2012-08-15 59 views
1

我一直有與ICU的基於規則的Transliterator問題,這竟然是一個缺少-O2標誌的調試版本使用G ++ 4.7.1引起工作。這是工作正常,當我做了一個發佈版本(其中有-O2),但是當我建立我的項目沒有這種標誌調試,Transliterator對象永遠不會被正確創建。ICU Transliterator不無-02標誌使用g ++

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

沒有優化,t被分配一個空指針和status設置爲32767,在通過ICU的u_errorName()運行翻譯爲BOGUS UErrorCode

我嘗試的第一件事是從我的版本中刪除-g調試標誌,但這對createFromRules()返回的內容沒有任何影響。只有當我加入-O2時,它才創建了Transliterator對象。

測試表明-O1,-O2-O3都按預期工作,只有-O0導致發生此情況。

有人可以解釋爲什麼這應該是這樣嗎?

+1

它看起來像*使用調試器的*完美局面。 – 2012-08-15 18:11:51

+0

@ n.m。那麼,我想我可以用調試符號重建ICU ... – SigueSigueBen 2012-08-15 18:57:19

+0

@ n.m。通常這是另一種方式 - 調試模式'解決'它! – 2012-08-15 20:09:40

回答

2

你不應該有/不同的結果,而無需調試。你能創建一個小規模的測試案例,包括規則,給ICU版本和操作系統/平臺,並提交一張票? 4.7.1於2個月前發佈。可能是一個編譯器錯誤(ICU有一個發現這些!!的歷史)或潛在的錯誤。您可以將錯誤鏈接到該問題,反之亦然。

+0

我已更新該問題。我也會提交一份錯誤報告。 – SigueSigueBen 2012-08-15 20:28:36

+0

@SigueSigueBen它發生在所有規則或只有一組? – 2012-08-15 20:47:05

+0

@StevenRLoomis我只用一個規則集來測試它。但是,我已經檢查了UnicodeString,以確保在函數調用之前其內容是正確的。我應該補充說,'parseError'的行和列號設置爲我的規則集超出範圍,但都是非負的。 – SigueSigueBen 2012-08-15 20:53:38