Bcc32c/bcc64コンパイラでビルドすると、「ICE: Internal compiler error: 0 @ 00000000」というエラーが発生することがある

提供: Support
移動先: 案内検索

対象となる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;
	}
}

関連情報