RENESAS TOOL NEWS 2006年12月16日 : 061216/tn3
M16Cファミリ用 Cコンパイラパッケージ
ご使用上のお願い
--関数引数としてアドレスを渡す場合の注意事項-- |
M16Cファミリ用Cコンパイラパッケージの使用上の注意事項を連絡します
1. 該当製品
(1) M32Cシリーズ*1用Cコンパイラパッケージ (M3T-NC308WA)
V.5.00 Release 1 ~ V.5.40 Release 00
(2) M16Cシリーズ*2用Cコンパイラパッケージ (M3T-NC30WA)
V.5.00 Release 1 ~ V.5.40 Release 00A
*1. M32C/90, M32C/80, M16C/80, およびM16C/70シリーズの総称です。
*2. M16C/60, /30, /20, /10, /TinyおよびR8C/Tinyシリーズの総称です。
2. 内容
変数のアドレスが引数として渡される関数呼び出しにおいて、間違った
アドレスが渡される場合があります。
3. 発生条件
以下の条件をすべて満たす場合に発生します。
(1) 自動変数のアドレスを引数とする関数呼び出しがある。
(2) (1)の関数を呼び出す関数から、(1)の呼び出し直後にリターンしている。
(3) 最適化オプションの-OSと-O5を同時に使用している。
例
-------------------------------------
void sub(int *);
void func(void)
{
int i;
sub(&i); /* 発生条件(1)および(2) */
}
void sub(int *i)
{
省略
}
-------------------------------------
4. 回避策
自動変数のアドレスを引数とする関数の呼び出し直後に、ダミーのasm関数を
挿入してください。
-------------------------------------
void func(void)
{
int i;
sub(&i);
asm("");
}
-------------------------------------
5. 恒久対策
本問題は以下のバージョンでは改修済みです。最新バージョンをご使用ください。
(1) M32Cシリーズ用Cコンパイラパッケージ V.5.41 Release 00 以降
(2) M16Cシリーズ用Cコンパイラパッケージ V.5.42 Release 00 以降