MESC TOOL NEWS:
MESCT-NC30WA_2-981001D
この度、M16C/60シリーズ用CコンパイラNC30WA, NC30 1.00 Release 1からV.3.00 Release 2 のご使用上の注意事項をご連絡いたします。本件につきましては誠に申し訳ございませんが、 本資料に示します回避策で対応くださいますようお願いいたします。
関数の引数について
- 内 容
関数の引数に同一名の引数を記述した場合に不正なコードを出力する場合がありました。
- 発生条件
- レジスタ渡しになる関数
- 上記の引数を求めるために同一名の関数を呼び出している
- 上記の関数呼び出しが最初(1つめの条件)の関数の第1引数に記述されている
上記3つの条件を満たした場合に発生いたします。
[Cソースファイル]
-----------------------------------------------------------------------
int func(int,int);
main()
{
int i;
i=func(func(3,2),1);
}
-----------------------------------------------------------------------
- 回避策
第1引数となる関数からの戻り値を一時的にTMPに代入後、引数として渡してください。
例)
-----------------------------------------------------------------------
i=func(3,2);
i=func(i,1);
-----------------------------------------------------------------------
NC30WA, NC30 ご使用上のお願い
MESCT-NC30WA_2-981001D
bit判断について
- 内 容
ビット判断を行った場合に、不正なコードを出力する場合がありました。
- 発生条件
- 条件文( if,while,for,switch,3項演算子)の条件式で、1ビットのビットフィールド同士の論理演算を行っている。
- 式の右に優先順位の高い演算子があるか、演算子の右に括弧で括ったビットAND、OR演算がある。
上記2つの条件を満たすか、もしくは以下の条件を満たした場合
- 1ビットのビットフィールドの式に対して単項否定か1,0との比較(==、! =)またはその両方を行っている式の論理値を使っている。
例1)
-----------------------------------------------------------------------
if(s.b0 | s.b1 & s.b2)
-----------------------------------------------------------------------
例2)
-----------------------------------------------------------------------
if((!(~s.b0 | (s.b1 & s.b2))==1)&&(a==100))
-----------------------------------------------------------------------
- 回避策
- V.1.00 Release 1からV1.00 Release 3をご使用の場合
コンパイル時にオプション"-Off=253"を指定してください。
- V.2.00 Release 1以降をご使用の場合
コンパイル時にオプション"-Off=353"を指定してください。
NC30WA, NC30 ご使用上のお願い
MESCT-NC30WA_2-981001D
for文について
- 内 容
for文中の初期化式に対して誤った初期化を行う場合があります。
- 発生条件
- コンパイルオプションに-O,-OR,-OS の何れかを指定している
- for/while のループで、継続条件式が変数と定数の比較である。
- for文の初期化式か、for/whileの前で条件式で使用する変数に定数を代入している
例)
-----------------------------------------------------------------------
i=10;
for(i=x;i<10;i++){
<省略>
-----------------------------------------------------------------------
- 回避策
- V.1.00 Release 1からV.1.00 Release 3をご使用の場合
コンパイル時にオプション"-Off=297"を指定してください。
- V.2.00 Release 1以降をご使用の場合
コンパイル時にオプション"-Off=397"を指定してください。
NC30WA, NC30 ご使用上のお願い
MESCT-NC30WA_2-981001D
longの定数の加算について
- 内 容
longの定数と符号なしint型変数の加算を行った場合に不正なコードを出力する場合がありました。
- 発生条件
- longの即値と符号なしの int 型変数を加算している。
- longの即値が下位2バイトが0である。
例)
-----------------------------------------------------------------------
unsigned int x;
unsigned long a;
a = 0x10000 + x;
-----------------------------------------------------------------------
- 回避策
int変数を一時的にlongの変数に代入後、演算してください。