RENESAS TOOL NEWS 2005年04月01日 : RSO-M3T-NC308WA-050401D
M32C/90, M32C/80, M16C/80, およびM16C/70シリーズ用Cコンパイラパッケージ(アセンブラ・統合化開発環境付き) M3T-NC308WAの使用上の注意事項を連絡します。
- 該当製品
M32C/90, M32C/80, M16C/80, およびM16C/70シリーズ用Cコンパイラパッケージ
M3T-NC308WA V.5.00 Release 1 ~ V.5.20 Release 02
- 内容
if文の制御式の結果が真または偽いずれの場合にもビットフィールドに定数を
代入する文を記述していると誤ったコードを生成します。
- 2.1 発生条件
-
以下の条件をすべて満たす場合に発生します。
| (1) |
elseを持つif文がある。 |
| (2) |
(1)の制御式の結果が真または偽いずれの場合も同じ変数名を持つ構造体のビットフィールドに定数を代入している。 |
| (3) |
(2)のビットフィールドのビット幅は、真または偽の場合に関わらずいずれも1ビットである。 |
| (4) |
(2)のビットフィールドのビット位置は真または偽の場合で異なる。 |
| (5) |
(2)の定数は真または偽の場合で異なる。 |
- 2.2 発生例
-------------------------------------------------------------
char c;
struct S
{
int b0:1; /* 発生条件(3) および (4) */
int b1:1; /* 発生条件(3) および (4) */
int b2:1;
int b3:1;
int b4:1;
int b5:1;
int b6:1;
int b7:1;
int b8:8;
}s;
void func( void )
{
if ( c == 1 ){ /* 発生条件(1) */
s.b0 = 0; /* 発生条件(2), (3), (4), および(5) */
}
else{ /* 発生条件(1) */
s.b1 = 1; /* 発生条件(2), (3), (4), および(5) */
}
}
-------------------------------------------------------------
- 回避策
elseのブロック中にダミーのasm()関数を挿入してください。
-------------------------------------------------------------
char c;
struct S
{
int b0:1;
int b1:1;
int b2:1;
int b3:1;
int b4:1;
int b5:1;
int b6:1;
int b7:1;
int b8:8;
}s;
void func( void )
{
if ( c == 1 ){
s.b0 = 0;
}
else{
s.b1 = 1;
asm(); /* ダミーのasm()関数を挿入 */
}
}
-------------------------------------------------------------
- 恒久対策
次期バージョンで改修する予定です。