Bcc32c/bcc64コンパイラでビルドすると、「ICE: Internal compiler error: 0 @ 00000000」というエラーが発生することがある
対象となるIDEバージョン
- C++Builder 10.4
対象となるコンパイラ
- bcc32c
- bcc64
問題
例えば、以下のようなtry..finallyのブロック内でローカル変数を宣言しているコードをbcc32cまたはbcc64のコンパイラでビルドすると
void __fastcall TForm1::Button1Click(TObject *Sender) {
try {
}
__finally {
String str = "Test";
Button1->Caption = str;
}
}
ICE: Internal compiler error: 0 @ 00000000
という内容のコンパイルエラーが発生することがあります。
解説
「ICE: Internal compiler error: 0 @ 00000000」というエラーが発生するバターンのバリエーションはいくつか存在しますが、そのパターンの1つは、こちらのサポート情報と関連しており、try..finallyのブロック内でローカル変数を宣言しているコードで発生します。
この問題はEmbarcadero Quality Portalにも報告されております。
ケース番号 | タイトル |
---|---|
RSP-29161 | __finally still broken in 10.4 |
解決
この問題は、C++Builder 11で修正されました。C++Builder 11よりも前のバージョンでは、以下の回避方法でご対処ください。
以下のコード例のように宣言する変数をtry..finallyのスコープ外に移動すると、エラーは解消されます。
void __fastcall TForm1::Button1Click(TObject *Sender) {
String str;
try {
}
__finally {
str = "Test";
Button1->Caption = str;
}
}