MESC TOOL NEWS:
MESCT-NC77WA-981016D
NC77, NC77WA
NC79, NC79WA
ご使用上のお願い
|
77XXシリーズ用CコンパイラNC77WA, NC77、および7900 シリーズ用CコンパイラNC79WA, NC79をご使用される際の注意事項をご連絡いたします。本件につきましては誠に申し訳ございませんが、 本資料に示します回避策で対応くださいますようお願いいたします。
#pragma PARAMETER について
- 発生バージョン
| 製品名 | 問題発生バージョン |
| NC77, NC77WA | V.3.00 Release 1 ~ V.5.00 Release 1 |
| NC79, NC79WA | V.1.00 Release 1 ~ V.3.00 Release 1 |
- 概 要
#pragma PARAMETER指定した関数を呼び出す際に、引数として自分自身を与えると不正なコードを生成する場合があります。
- 発生条件
以下の条件を同時に満たす場合のみ発生します。
- #pragma PARAMETERで指定された関数を呼び出す。
- 上記関数の第一引数として、自分自身への戻り値を使用する。
- 発生現象
関数呼び出し時に誤った引数を使用します。
- 発生例
[C言語ソース例]
-----------------------------------------------------------------------
extern int asm_func(int,int);
#pragma PARAMETER asm_func( X, Y )
main()
{
int i;
i = asm_func( asm_func( 3, 2 ), 1 );
}
-----------------------------------------------------------------------
- 回避策
第一引数となる関数からの戻り値を一時的にテンポラリ変数に代入し、そのテンポラリ変数を引数として使用してください。
[C言語ソース例]
-----------------------------------------------------------------------
extern int asm_func(int,int);
#pragma PARAMETER asm_func( X, Y )
main()
{
int i, tmp;
tmp = asm_func( 3, 2 );
i = asm_func( tmp, 1 );
}
-----------------------------------------------------------------------
ループの初期化ついて
- 発生バージョン
| 製品名 | 問題発生バージョン |
| NC77, NC77WA | V.4.00 Release 1 ~ V.5.00 Release 1 |
| NC79, NC79WA | V.2.00 Release 1 ~ V.3.00 Release 1 |
- 概 要
誤ったループのコードを生成する場合があります。
- 発生条件
以下の条件を同時に満たす場合のみ発生します。
- コンパイルオプション-O, -OR, -OS のいずれかを指定する。
- ループの初期化式より前で、変数に定数を代入する。
例) i = 10;
- ループの初期化式で、上記変数に他の変数を代入する。
例) i = x;
- for/while のループで、継続条件式が上記変数と定数の比較である。
例) i < 5;
- 発生現象
誤ったループのコードを生成します。
- 発生例
以下の例では誤って「 i = 10; 」が初期値であると判断されるため、条件式「 i < 5 」は常に不成立と誤判断されてしまいます。 最終的に「絶対に実行されないループのコード生成は不要」としてループのコードが生成されません。
[C言語ソース例]
-----------------------------------------------------------------------
int func(int x)
{
int i, j;
i = 10; /* 誤ってこの値が初期値と理解されてしまう */
j = 20;
for(i = x; i < 5; i++){
j += i;
}
return j;
}
-----------------------------------------------------------------------
- 対応策
コンパイル時にオプション「-Off=397 」を指定してください。