RENESAS TOOL NEWS 2008年7月16日 : 080716/tn1
| M16Cファミリ用Cコンパイラパッケージ
ご使用上のお願い
--関数内static変数を持つstatic関数に 関する注意事項-- |
M16Cファミリ用Cコンパイラパッケージの使用上の注意事項を連絡します。
- 関数内static変数を持つstatic関数に関する注意事項
1. 該当製品
(1) R32C/100シリーズ用Cコンパイラパッケージ V.1.01 Release 00
(2) M32Cシリーズ(注1)用Cコンパイラパッケージ(M3T-NC308WA)
V.5.00 Release 1 ~ V.5.41 Release 01
(3) M16Cシリーズ(注2)用Cコンパイラパッケージ(M3T-NC30WA)
V.5.00 Release 1 ~ V.5.44 Release 00
注1: M32C/80、M16C/80、およびM16C/70シリーズの総称です。
注2: M16C/60、/30、/20、/10、/Tiny、およびR8C/Tinyシリーズの総称です。
2. 内容
関数内static変数を持つstatic関数を含むファイルを、最適化オプション
-Ostatic_to_inlineを使用してビルドした場合、アブソリュートモジュール
ファイル .x30作成後に実行されるユーティリティSNI Generator が異常終了
する場合があります。
この結果、SNI Generator が生成するスタック情報ファイルを使用する、
スタック解析ツールCall Walkerおよびマップ情報を参照するためのツール
Ecx Mapが使用できません。
2.1 発生条件
以下の条件をすべて満たす場合に発生します。
(1) 関数内static変数を持つstatic関数を定義している。
(2) コンパイルドライバの起動オプション -finfo を使用している。
(3) 最適化オプション -Ostatic_to_inlineを使用している。
(4) M32Cシリーズ用CコンパイラパッケージおよびM16Cシリーズ用Cコンパイラ
パッケージを使用している場合、最適化オプション -O1、-O2、-O3、-O4
および-O5のいずれか1つ以上を使用している。
2.2 発生例
------------------------------------------------------------------------
int xxx;
static void func( int a )
{
static int xxx;
xxx += a;
}
void main( void )
{
func(1);
}
------------------------------------------------------------------------
3. 回避策
以下のいずれかの方法で回避してください。
(1) -Ostatic_to_inlineを使用しない。
(2) -finfoを使用しない。
注意: この場合CallWalkerおよびEcx Mapは使用できません。
(3) 関数内static変数を持つstatic関数を作成しない。
4. 恒久対策
次バージョンで改修する予定です。