MAEC TOOL NEWS:
MAECT-M3T-NC30WA-021001D
M3T-NC30WA, M3T-NC79WA, M3T-NC77WA
ご使用上のお願い
|
Cコンパイラ(アセンブラ・統合化開発環境付き) M3T-NC30WA, M3T-NC79WA, M3T-NC77WAの使用上の注意事項を連絡します。
- 構造体または共用体の配列をtypedefによって型定義している場合の注意事項
- 該当製品
- M16C/60, M16C/30, M16C/20, M16C/10シリーズ用Cコンパイラ
- M3T-NC30WA V.1.00 Release 1 ~ V.5.00 Release 2
- 79xxシリーズ用Cコンパイラ
- M3T-NC79WA V.2.00 Release 1 ~ V.4.10 Release 1A
- 77xxシリーズ用Cコンパイラ
- M3T-NC77WA V.3.00 Release 1 ~ V.5.20 Release 4
- 内容
- 構造体または共用体の配列をtypedefによって型定義し、その定義した型の変数をnear、farまたはconst修飾子を付加して宣言した場合、不正なコードが生成される、またはSystem Errorが発生する場合があります。
| ※ | M3T-NC30WA V.1.00 Release 1 ~ V.2.20 Release 1では、不正なコードを生成します(ただし、リンク時にワーニングが出力されます)。 |
| ※ | M3T-NC30WA V.3.00 Release 1 ~ V.5.00 Release 2では、System Errorが発生します。 |
| ※ | M3T-NC79WA、M3T-NC77WAでは、不正なコードを生成します。 |
- 発生条件
- 以下の条件をすべて満たす場合に問題が発生する場合があります。
- (1) 構造体または共用体を定義している。
- (2) (1)の構造体または共用体の配列をtypedefによって型定義している。
- (3) (2)で定義した型によって変数を宣言してる。
- (4) (3)の宣言にはnear、far、またはconst修飾子が付加されている (const修飾子は、M3T-NC30WAのみの発生条件)。
- (5) (1)の構造体または共用体のメンバを参照している。
- 発生例
--------------------------------------------------------------------------
struct tag { /* 発生条件(1) */
long l;
char c;
};
typedef struct tag ARR[3]; /* 発生条件(2) */
far const ARR dat /* 発生条件(3),(4) */
= { 1, 2, 3, 4, 5, 6 };
void func(int i)
{
char c;
c = dat[i].c + 1; /* 発生条件(5) */
}
--------------------------------------------------------------------------
- 回避策
- 発生条件(4)で該当した修飾子を、発生条件(2)の型定義時に構造体または共用体の配列に付加してください。
[例]
--------------------------------------------------------------------------
struct tag {
long l;
char c;
};
typedef struct tag far ARR[3]; /* far修飾子を付加 */
far const ARR dat = { 1, 2, 3, 4, 5, 6 };
void func(int i)
{
char c;
c = dat[i].c + 1;
}
--------------------------------------------------------------------------
- 恒久対策
本内容は、次期バージョンアップの際に改修する予定です。