文がハングアップします

目次
S1C33Fami
l
yソフトウェア開発ツール(
GNU33) リリース履歴.................................................................................. 2
GNU33 ICD 対応表........................................................................................................................................................ 9
ICD CPU 対応表............................................................................................................................................................ 9
不具合内容のご説明 ................................................................................................................................................... 10
GNU33 C/C++ コンパイラ既知の問題 ......................................................................................................................... 14
GNU33 IDE 既知の問題 ............................................................................................................................................... 21
1
S1C33Fami
l
y
ソフトウェア開発ツール(
GNU33) リリース履歴
以下は、各リリースバージョンの前回リリースバージョンとの改善及び、変更点の履歴です。
(
リリース時期の新しいものから記述しています。)
ツール名
Ver4.1.0 2010/09/30
統合開発環境(IDE)
・
ライブラリ生成用のプロジェクト作成機能を追加
・
プロジェクト[プロパティ]-[GNU33 リンカスクリプト設定]でVMA≠LMAの設定のときプルダウン
リストに、LMAのセクションを指定可能
・
プロジェクトのビルドで編集していないCソースファイルもコンパイルしてしまう不具合を修正
C/C++コンパイラ
―
(
gcc)
アセンブラ(
as)
・
-mc33_ext が指定されている時の、シンボル名登録に失敗した場合のエラーメッセージを修正
リンカ(ld)
―
ライブラリ
―
デバッガ(gdb)
・
c33 df モトローラ S1 S2 出力追加
・
c33 dclk コマンドが PEコアで動作しない不具合の修正
・
不具合(
GDB-05 参照)
の修正
その他
―
2
ツール名
Ver4.0.0 2009/10/30
統合開発環境(IDE)
・ GDBとEclipse の統合
・ I
DEの日本語化
・ コンパイラオプション追加(プロトタイプワーニング)
・ シンボル登録の連動
C/C++ Project Paths -> path Containers と GNU33 Build Options -> Build Options ->
Symbol の登録/削除 が連動するようにしました。
・ プロジェクトインポート時、プロジェクトをコピーする設定をデフォルト化
C/C++コンパイラ
(
gcc)
・ -Werror-implicit-function-declaration オプションにデフォルトで対応
これにより、C ソースファイルで、宣言される前に関数を使用した場合にエラーを出力します
アセンブラ(
as)
・ 2 パスメイク処理の高速化
リンカ(ld)
―
ライブラリ
・
エミュレーションライブラリで、冗長なスタックへの退避/復帰の処理を削除
デバッガ(gdb)
・ メモリウィンドウでヘキサ表示形式の場合に”
0x”
表示を削除
・ ショートカットのファンクションキーへの割り当て。
・ GDB 起動時のメモリウィンドウ アドレス$pc を変更可能にしました。
・ デバッガ終了時のウィンドウ情報保存確認の追加
・ プロファイル・
カバレッジ機能の追加
・ Help メニューにコマンドリファレンスを追加
・ c33 autotd(PC トレース情報の自動表示)コマンドを追加
・ c33 autotf(PC トレース情報の自動保存)コマンドを追加
・ c33 コマンドのパラメータで空白を含む文字列は、ダブルクオーテーションで囲むことにより認
識出来るように変更。(
例:c33 fwlp コマンドの Comment パラメータなど)
・ Simulated I/O の画面・
ファイル同時出力
・ 不具合(
GDB-04 参照)
の修正
その他
・
サンプルのコマンドファイル内から、不要な c33 stdin の記述を削除
・
サンプルのコマンドファイルで、 icd usb -> icd6 usb に変更
・
サンプルのパラメータファイルの設定で、未使用領域のサイズをそれぞれ 1M に縮小
・
サンプルのコマンドファイルからcont 命令を削除し、IDE からの起動に対応
・
scanf() を使用していた、以下のサンプルを削除
std¥simulator¥ansilib
pe¥simulator¥simulatedIO
3
ツール名
Ver3.3.0 2009/02/27
統合開発環境(IDE)
・
Problems ビューから外部エディタ行指定起動機能を追加
・
RTOS ステータスモニタ を IDE より切り離し
・
新漢字フィルタに対応
・
mak ファイル内で cp.exe を使用している箇所を、copy を使用するように変更
・
IDE のベースを Eclipse 3.4/CDT5.0/JavaVM5.0 へ更新
・
プロジェクト新規作成・
インポート時、.cdtproject ファイルが.cproject ファイルに置き換わります
・
elf ファイルのコンテキストメニューからObject file conversion を行ったときの objcopy の引数に
-I elf32-little を追加
・
ビルド正常終了時、コンソールに終了メッセージを表示
・
Navigator ビューに*.dump/*.sa/*.saf/*.out ファイルのフィルタを追加
・
Linked Resources に対応
・
-Wall オプションに対応
・
不具合(
IDE-04参照)
の修正
C/C++コンパイラ
(
gcc)
・
漢字フィルタ処理をプリプロセッサ/コンパイラに実装
この実装により、漢字フィルタ処理が有効な場合(-mno-sjis-filt オプションが指定
されていない )は、シングルクォテーション( ‘ ) で全角文字 1 文字を囲っているコードの
出力結果が Ver3.3.0 より前のバージョンと変わります。
詳細は、コンパイラパッケージマニュアルの「
Shift JIS コードのフィルタ機能」
を
参照して下さい。
また、この実装により 「
GNU33 C/C++ コンパイラ既知の問題」
の No.8 は、解決されました。
・
漢字フィルタ処理を無効にする -mno-sjis-filt オプションを追加
アセンブラ(
as)
リンカ(ld)
―
・
メモリ配置が.bss セクションと.text セクションでオーバーラップしている場合、リンクエラーと
なるように修正
ライブラリ
デバッガ(gdb)
―
・Source Window から設定したエディタでソースファイルを開く機能の追加
・ブレークポイントの save/load 機能を追加
・Watch Window に登録したシンボルの save/load 機能を追加
・
不具合(
GDB-03 参照)
の修正
その他
・
上記ツール全て、Windows Vista 対応
・
以下のツールを cygwin-1.5.25 ベースに更新
cygwin1.dll/cygiconv-2.dll/cygintl-3.dll/cygintl-8.dll/ar.exe/cp.exe/make.exe/
objcopy.exe/rm.exe/sed.exe/sh.exe
・
Utility/ICDfirm を削除
4
ツール名
Ver3.2.1 2008/06/30
統合開発環境(IDE)
・
ウィンドウ上のバージョン表記をGNU33 v3.2.1 に変更
・
プロジェクトのビルドで 1path、2path メイクの切り替え機能実装
・
旧バージョンで作成されたプロジェクトをインポート時、コンパイルオプションで"-c"を含むものは
無条件に"-c"部分を削除してしまうのを修正(不具合 IDE-03 を参照)
・
/cpuinfo 内の設定ファイルに項目追加
C/C++コンパイラ
―
(
gcc)
アセンブラ(
as)
―
リンカ(ld)
―
ライブラリ
・
エミュレーションライブラリで浮動少数点の比較で 0 と-0 が一致しない不具合を修正
・
ANSI ライブラリgmtime() の定義部のパラメータに const が付いていなかった点を修正
・
ANSI ライブラリのヘッダファイルのプロトタイプで、パラメータがコメントになっているもの
があるので、コメントを外して型チェックが行われるように修正
デバッガ(gdb)
・
Watch/Local と print コマンドで2進数表示する場合、シンボルサイズ分表示するように変更。
・
不具合の修正(
GDB-02 を参照)
Toppers33
・
-medda32 オプションを追加することにより、32 ビット空間に対応
・
dmt33e07/ dmt33401/ luxun4 のサンプルがリンクエラーになるのを修正
・
ICDV6 に対応した icdv6.cmd を dmt33209/ dmt33e07/ dmt33401/ luxun2/ luxun4 用に追加
その他
・
漢字フィルターが$$$ファイルを残す問題を修正
・
objdump.exe -D オプションで逆アセンブル時に処理が終了しない問題を修正
5
ツール名
Ver3.2.0 2008/02/12
統合開発環境(IDE)
・
IDE のベースを Eclipse3.2 へアップデート
・
-gstabs オプションの設定をデフォルト化
・
リンカの-Map,-N オプションをデフォルト化
・
新規プロジェクトウィザードの修正
・
各種プロジェクトプロパティ画面の修正
・
Makefile の出力を修正(2pass メイク対応)
・
シミュレーテッドIO 用ライブラリ(LIBSTDIO.A)をデフォルトでリンク
・
新規ウィザードの CPU の設定をファイル化
・
プロジェクトリネーム時、デバッガ起動設定ファイルもリネーム
・
プロジェクトプロパティの一般情報・
ビルド設定変更時に clean するかどうかプロンプト
・
コマンドファイル生成で ICD Ver6 に対応
・
リンカスクリプトファイルのセクション終了ラベルの出力位置変更(IDE-02)
・
不具合の修正(IDE-01)
・
ウィンドウ上のバージョン表記をGNU33 v3.2.0 に変更
C/C++コンパイラ
(
gcc)
アセンブラ(
as)
・
char 型同士の乗算に関する不具合の修正
(GNU33v3.1.1 の compiler_known_issues_ja.txt No.9 を参照 )
・
アセンブラ(as.exe/as_org.exe)で-mc33_ext オプション(2pass アセンブル)対応
・
as でアセンブル時、オブジェクトファイルに C33 マシンコード付加
リンカ(ld)
・
ld の-Map オプション指定時、デバッグ情報に関するメッセージ追加
・
ld でリンク時、C33 マシンコードチェック・
STD/ADV/PE チェック処理追加
ライブラリ
・
シミュレーテッドIO 用ライブラリ(libstdio.a, libstdio.h)追加
・
ANSI ライブラリで以下の関数のバグを修正
strtod() / strstr() / sprintf() / sin()
・
long long 型エミュレーションライブラリ( libgcc2.a ) をリンク時のサイズが最小限になるように
修正
・
ANSI ライブラリの関数のプロトタイプを一部、修正
デバッガ(gdb)
その他
―
・
漢字フィルタの一行の文字数の制限の撤廃
・
objdump -h 実行時、デバッグ情報に関するメッセージ追加
・
include フォルダ内のファイルを整理
・
objdump で-d 実行時、分岐命令のアドレスおよびシンボル表示
6
ツール名
Ver3.1.1 2008/1/31
統合開発環境(IDE)
・
ウィンドウ上のバージョン表記をGNU33v3.1.1 に変更
C/C++コンパイラ
―
(
gcc)
アセンブラ(
as)
―
リンカ(ld)
―
ライブラリ
―
デバッガ(gdb)
・
ICD Ver6 に対応
・
不具合の(
GDB-01 参照)
その他
―
ツール名
Ver3.1 2006/07/31
統合開発環境(IDE)
・
プロジェクトプロパティの Build Options に Environments タブを追加
・
プロジェクトプロパティの GDB Commands にコマンドファイル用のコマンドを編集可能
・
プロジェクトプロパティの Linker Script Settings の UI の改良
・
日本語 OS 使用上で新規プロジェクト作成時、漢字フィルタオプションがデフォルトON
・
Navigator ビューからobjcopy 実行可能
・
新規プロジェクト作成時、ベクタアドレス指定可能
C/C++コンパイラ
―
(
gcc)
アセンブラ(
as)
リンカ(ld)
ライブラリ
デバッガ(gdb)
―
・
ld の-Map オプション指定時、デバッグ情報に関するメッセージ追加
―
・
c33 fle コマンドにタイムアウト機能を追加
・
2 重起動の禁止。 これに加えて、2 重起動許可オプション"--double_starting"を追加
・
ユーザ専用機能ボタンを追加
・I
CDモードで起動時、c33 df コマンドのテキストファイル形式出力で、パラメータファイルでメモリ
の設定範囲外を指定すると、"**"表記になっていましたが、これをターゲットメモリのデータを出
力するようにしました。
その他
・
objdump -h 実行時、デバッグ情報に関するメッセージ追加
・
cygwin1.dll をバージョンアップ(1.5.18)
・
英語版ユーザマニュアル(doc¥S5U1C33001C_E.pdf)の追加。
・
アプリケーションマニュアル(doc¥S1C33_gnu_application-J.pdf/doc¥update_appl_J.pdf)の削除。
7
ツール名
Ver3.0 2006/02/03
統合開発環境(IDE)
・
RTOS ステータスモニタ (Toppers のみ)
・
漢字フィルタON/OFF 指定追加
・
.vector セクションをリンカスクリプトに追加
新規プロジェクトウィザードも改良
・
リンカスクリプト設定自動更新機能
・
データエリア関連オプション削除
・
GDB 起動構成ファイルをプロジェクトフォルダに生成 (*.launch)
・
PE+ICD2 デバッグ構成削除
C/C++コンパイラ
・
gcc コアバージョンアップ (v2.95.2 -> v3.3.2)
(
gcc)
・
C++ 言語対応 (含む STL)
・
alloca()対応
・
long long 型対応
・
S/T/Z/G データエリア削除
( 正式サポート対象外として残っています。
それに伴い、 -mdp,-mgda,-mgdp,-mezda,-metda,-mesda は、正式なサポート対象外となりま
す。)
・
-Os オプション追加
アセンブラ(
as)
―
リンカ(ld)
―
ライブラリ(
lib)
―
デバッガ(gdb)
・
ソフトウェアブレークポイント指定可能数増 (16 -> 200)
・
%psr レジスタ内容を Registers 画面に表示
・
DCLK 設定コマンド追加 (c33 dclk)
・
キャッシュヒット率表示コマンド追加 (c33 cachehit)
・
OSC モードウェイト設定コマンド追加 (c33 oscwait)
・
ロジックアナライザモードコマンド追加 (c33 logiana)
その他
・
新ユーザマニュアル
・
IDE 用サンプル追加
8
GNU33 ICD 対応表
GNU バージョン
ICD Ver.2
ICD Ver.3
ICD Ver.4
ICD Ver.6
GNU33 Ver3.1.0
○
○
×
×
GNU33 Ver3.2.1
○
○
○
○
GNU33 Ver3.3.0
○
○
○
○
GNU33 Ver4.0.0
○
○
○
○
GNU33 Ver4.1.0
○
○
○
○
○は対応します。 ×は対応しません。
ICD CPU 対応表
ICD バージョン
C33STD
C33PE
C33401
Ver.2
○
×
×
Ver.3
○
○
○
Ver.4
○
○
○
Ver.6
○
○
○
○は対応します。 ×は対応しません。
9
不具合内容のご説明
項番
不具合内容
IDE-01
IDE からのビルド時、リンカで out of range エラーが発生します。
2pass ビルド後のオブジェクトファイル(最適済)を1pass 目のビルドで使用していたため、out of range が発生
しておりました。
IDE は、1pass 目ビルドで生成されたオブジェクトファイル(未最適化)を、2pass ビルド後に復元するコマンドを
make ファイルに出力します。
これにより、out of range は発生せず、正常にビルドできるようになります。
IDE-02
ライブラリ内(libgcc.a)から別ライブラリ内(libc.a)のシンボルを参照しているとき、
リンカスクリプトファイルで指定したマッピングの通りにリンクされず、リンカでオーバーラップエラーが発生し
ます。オーバーラップエラーを回避するため、
IDE は、セクションの終了ラベル(
__END_text など)
をで、セクション定義の中括弧の外に定義するリンカスクリ
プトファイルを出力します。
IDE-03
旧バージョンで作成されたプロジェクトをインポート時、コンパイルオプションで"-c"を含むものは
無条件に"-c"部分を削除してしまうのを修正。
・ プロジェクトプロパティ->GNU33 Build Options->Compiler->Micellaneous->Other Flags に
“-fsigned-char”などが指定されていた場合、
インポート後に”-c”部分が削除され”-fsignedar”に変更される問題を修正
IDE-04
C/C++ Project、Navigator、からプロジェクトのコピー&ペースト後にリネームしたとき、以下の設定が変更さ
れない不具合を修正。
・ GNU33 Build Options 内 の リンカオプションの リンカスクリプトファイル 名 が 変 更 され ない。(-T
new_project_gnu33IDE.lds)。
・ External Tools の”GDB33 launch for new_project”が作成されない。
なお、プロジェクトのコピー&ペーストでは設定は変更されません。ペースト後にプロジェクトのリネームを行
ってください。
GNU33v3.1.1 以前に作成されたプロジェクトをGNU33v3.2.0 以降でインポートした後にプロジェクトリネームし
たとき.project ファイルの更新に失敗する不具合を修正。
プロジェクトリネーム時の.project ファイル内の make の引数(-f tst_gnu33IDE.mak)を書き換えようとして値を
取得しようとしたが、CDT をアップデートしてキー文字列が変更されたため、情報取得に失敗していた。
古いプロジェクトのリネームにも失敗しないよう、.project ファイルから古いキーでも読めるように修正。
キー文字列
旧 =org.eclipse.cdt.make.core.buildArguments (GNU33v3.1.1 以前に作成されたプロジェクト)
新 =org.eclipse.cdt.make.core.build.arguments
10
項番
不具合内容
GDB-01 c33 int コマンドでNMI
割り込み時、PC/PSR をPUSHしない。
GDB コネクトモード
シュミレータモード
c33 int コマンドで割り込みレベルがI
Lより小さくてもPC/PSR を PUSH してしまう。
シュミレータモード
Preference menu-Global-Font 変更 Apply->cancel で元の font に戻ってしまう。
シュミレータモード
/I
CDモード
memory window : Binary 入力+enter で 16 進表示になる。
シュミレータモード
/I
CDモード
起動時オプション"--c33_cmw"で GDB を起動後、Console Window からsource コマンド シュミレータモード
を実行すると、待ち時間中の CPU 使用率が 100%になり、ウェイト中 REG Window の
/I
CDモード
X(
閉じる)
ボタンでGDBが異常終了してしまう。
enable コマンドで存在しない breakpoint 番号を指定したときエラーにならない。
シュミレータモード
/I
CDモード
Source ウィンドウ表示を[SRC+ASM]にして、PC,Browse の色を変更した場合、SRC
シュミレータモード
表示の色のみが変わる。
/I
CDモード
--nw オプションで起動中の GDB は2重起動できてしまう。
シュミレータモード
/I
CDモード
Source Preferences ウィンドウの Colors 中にある色アイコンをクリックして Choose
シュミレータモード
color 画面を表示したときSource Preferences ウィンドウの OK ボタンが押せてしまう。 /I
CDモード
GDB 起動直後、Memory ウィンドウに何も表示されていない状態でデータ表示セルを
シュミレータモード
数回クリックすると、GDB が異常終了する。
/I
CDモード
Console ウィンドウから実行したデバッグコマンドの log が全て取れない。
シュミレータモード
/I
CDモード
Watch Expressions ウィンドウのホットキー表示が View メニューとツールバーの
シュミレータモード
アイコンとで異なる。
/I
CDモード
long/long long 型の watch win/local win/print/x で 32bit 長表示になっている。
シュミレータモード
/I
CDモード
エラー時のログの改行で、LF のみの場合がある。
シュミレータモード
/I
CDモード
レジスタウィンドウ gdbtk.ini CPU 別に縦横サイズを固定にした。
シュミレータモード
/I
CDモード
RUN 中メモリウィンドウをマウスクリックすると、「CPU is running」
を表示後、ハング
I
CDモード
アップする。
RUN 中 CPU使用率が高い。
I
CDモード
CPU=STD でシフト&ローテート %reg,%reg の不具合。
シュミレータモード
RAM に転送したプログラムにソフトブレーク設定して、GO&ブレーク後、設定した
シュミレータモード
アドレスの命令=0xAAAA になってしまう。
GDB-02 ソースウィンドウで漢字をマウスクリックするとGDBが異常終了してしまう。
シュミレータモード
/I
CDモード
11
ソースウィンドウで EUC コードと一致する漢字(
シフトJIS コード)
が空白になってし
シュミレータモード
まう。
/I
CDモード
シュミレーテッド入力(
SIMIO ウィンドウでキー入力待ち)
のとき、ツールバーの STOP
シュミレータモード
タン以外のボタンが Enable になってしまう。
/I
CDモード
永久ループする while()文をステップ実行すると、途中で STOP ボタンによる強制
シュミレータモード
ブレークが効かなくなることがある。
/I
CDモード
ICD Ver.6 の DISPW でトレース機能を無効にした状態で target コマンドを実行すると
I
CDモード
GDB が異常終了してしまうことがある。
ignore コマンドで指定したブレーク番号以外を通過してもブレークしない。
GDB-03 Watch ウィンドウで大きな構造体のメンバが正しく表示されない。
シュミレータモード
I
CDモード
ソースウィンドウ、Simulated I/O ウィンドウの改行部分に“
■”
を表示することがあ シュミレータモード
る。
/I
CDモード
ソースファイルに 0x5c 含む漢字コード(“
表”
や”
能”など)+改行があるとき、その箇 シュミレータモード
所にマウス移動すると、GDBが異常終了してしまうことがある。
/I
CDモード
プログラムロード中(load コマンド)、CPU 使用率が 100%になってしまう。
I
CDモード
長時間プログラムを実行中(continue コマンド)、リソースリークを起こしてしまうこと I
CDモード
がある。
コマンドファイルから continue コマンドを実行した場合、マウスが砂時計にならな シュミレータモード
い。
GDB 起動直後に LocalVariables ウィンドウが表示された状態で finish コマンドを実行 シュミレータモード
後、STOP ボタンを押下するとGDB が異常終了する。
GDB-04 Source Window のソース名・
関数名のプルダウンを触ったときにフォーカスが Source
Window から外れてしまうので、Source Window をクリックすることでフォーカスを
シュミレータモード
/I
CDモード
Source Window にするように修正した。
(
フォーカスが残ってしまうため、ホイールや、ショートカットキーを使えない点を改善)
[Source]ウィンドウを新たに開くと、[STOP]ボタンが表示されていない。
シュミレータモード
/I
CDモード
[GDB]while 無限ループ行で next を実行した時、 STOP 押下が無効になり、RUN 状
I
CDモード
態のまま停止しないことがある。
for 無限(
文中の処理無し)
ループの先頭行に breakpoint を設定し、finish コマンドを実
シュミレータモード
行したとき、停止しない。
for 無限ループ(
文中の処理無し)
の先頭行にテンポラリハードウェア PC ブレークを設
I
CDモード
定し、finish コマンドを実行したとき、ブレークが解除されない。
ローカルに宣言された構造体を Watch Window に登録し、step により他の関数内に入 シュミレータモード
ったとき、デバッガが落ちる現象を修正。
/I
CDモード
Memory window のアドレスが$pc のとき、リセットしても変化した$pc から再表示しな シュミレータモード
い。
/I
CDモード
テンポラリブレークが連続行で設定されているとき、そこを step 実行で通過してもブレ シュミレータモード
ーク設定が消えない。
/I
CDモード
12
long long 型変数の表示が 32bit であったのを 64bit に修正。
シュミレータモード
/I
CDモード
GDB-05 c33 clock の積算モードの値が期待値より5∼10 倍大きい結果を表示してしまう。
I
CDV6接続時、c33 clock のオーバーフローを検出できないことがある。
I
CDモード
I
CDモード
13
GNU33 C/C++ コンパイラ既知の問題
以下に GNU33 C/C++ コンパイラで認識されている不具合のケースを記載します。
不具合の内容
以下のコンパイルエラーになります。
internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
再現コード
#include <stdio.h>
int main( void )
{
struct data *p ;
No.1
printf( "OK¥n" ) ;
return( 0 ) ;
}
struct data {
int i ;
};
対応方法
①構造体の型の宣言を変数の宣言より前で行ってください。
②あるいは、<cstdio> をインクルードしてください。
コンパイル条件
C++ のみ。-gstabs をつけた時にエラーになります。
14
不具合の内容
以下のコンパイルエラーになります。
In function `int main()':
error: parse error before numeric constant
再現コード
#include <cstdio>
struct A {
A( void ) {}
A( int a ) {}
};
struct B {
B( void ) {}
B( A a ) {}
B( A arg1, A arg2 )
{
printf( "OK¥n" );
No.2
}
};
int main( void )
{
B b( A(), A(1) ) ;
return( 0 ) ;
}
対応方法
B b( A(), A(1) );
は、struct B のメンバ関数の宣言ですが、B 型の戻り値を返す関数の宣言と誤認識されています。
以下のように、宣言すると正しく認識されます。
B b((0,A()),A(1));
詳細、および類似のケースについては、http://gcc.gnu.org/bugs.html の
“
Parse errors for "simple" code.”
の項目を参照してください。
コンパイル条件
C++ のみ。
15
不具合の内容
以下のコンパイルエラーになります。
internal compiler error: in pop_binding, at cp/decl.c:1428
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
再現コード
#include <cstdio>
struct A
{
class D {} ;
};
struct B
{
typedef int D ;
};
struct C : public A
No.3
{
struct E : public B {} ;
class D {} ;
};
int main( void )
{
printf( "OK¥n" ) ;
return( 0 ) ;
}
対応方法
以下の二つの条件を満たした時に、エラーになります。
・
継承クラス( struct C )と基本クラス( struct A )の中に同じ名前のメンバクラスがある。
・
継承クラス内のメンバクラス( struct E )が継承されていて、その基本クラス( struct B )の中に
同じ名前のメンバ変数/typedef がある。
http://gcc.gnu.org/ml/gcc-prs/2002-02/msg00024.html と同現象のエラーになります。
クラス名とメンバ変数/typedef 名とは、不必要な重複を避けることを推奨します。
コンパイル条件
C++ のみ。
16
不具合の内容
if 文で比較した時点では、c を反転した値が 0 として認識されません。
else 文( ② ) を実行すべきところが、if 文( ① ) を実行してしまいます。
const signed short c = 0xffff;
const signed int c = 0xffffffff;
const signed long c = 0xffffffff;
const signed long long c = 0xffffffffffffffffLL;
でも、同様の結果になります。
再現コード
#include <stdio.h>
int main( void )
{
const signed char c = 0xff;
if( (signed int)(~c) ){
No.4
printf( "NG¥n" ) ;
-- ①
} else {
printf( "OK¥n" ) ; -- ②
}
return( 0 ) ;
}
対応方法
①const を外すと、正常に実行します。
②あるいは一度、ワーク変数に代入してから if 文で比較すると OK になります。
ex)
i_wk = (signed int)(~c);
if( i_wk ){
③また、上記の型でも、配列の場合は正常に実行します。
ex)
const signed char c[2] = { 0xff,0xff };
if( (signed int)(~c[0]) ) {
コンパイル条件
C++ のみ。
17
不具合の内容
以下のコンパイルエラーになります。
error: invalid use of undefined type 'class A'
error: forward declaration of 'class A'
再現コード
class A {
No.5
public:
void proc_1(void) throw(A);
};
対応方法
上記のようにメンバ関数が自らのクラスを throw 文でスローすることはできません。
コンパイル条件
C++ のみ
不具合の内容
以下のコンパイルエラーになります。
cc1.exe: out of memory allocating mmmmmmmm bytes after a total of nnnnnnnn bytes
再現コード
unsigned char uc_array[] = { 0x00,0x01, ........ };
int main()
{
No.6
※配列の大きさ -- 数十万バイト
対応方法
コンパイル時にコンパイラが確保しているメモリ領域が足りなくなるエラーです。
添え字なしの配列のサイズが大きすぎる為に発生しています。
同様のエラーは、ソースコードの行数の多いファイルで発生する場合もあります。
配列やソースコードを分割するなどして、一度にコンパイラが確保するメモリ領域が
小さくて済むようにして下さい。
コンパイル条件
C / C++。
18
不具合の内容
再現コードで b の値が 126 になりません。
再現コード
#include <stdio.h>
signed int a ;
int main( void )
{
signed char tmp ;
signed int b ;
a = 128 ;
tmp = a - 1 ;
No.7
-- ①
b = tmp - 1 ; -- ②
if ( b != 126 ) {
printf( "NG¥n" ) ;
} else {
printf( "OK¥n" ) ;
}
return( 0 ) ;
}
対応方法
最適化によるエラーです。最適化により、① & ②の処理がまとめてコンパイルされます。
その為、128(=0x80) の符号拡張( signed char -> signed int )と減算が一度に行われ、0xffffff80 - 2 という
処理になります。その結果、-130(=0xffffff7e) という値になります。
このケースでは、signed char tmp; を volatile をつけて宣言することで回避して下さい。
コンパイル条件
C / C++ で最適化レベルが -O / -O2 / -O3 の時にエラーになります。
19
不具合の内容
strcmp() の結果が等しくなりません。
Kanji filter は、コンパイル時にシフトJIS コードを ASCII エスケープに変換するツールでデフォルトで有効
になっています。
文字列化演算子のマクロを使用した場合、コンパイル時には以下の順序で文字列が変換されていく為、
等しい文字列になりません。
ソースコード
str("字")
"¥"字¥""
↓
Kanji filter による変換
str("¥x8e¥x9a")
"¥"¥x8e¥x9a¥""
↓
プリプロセッサ による変換
"¥"¥¥x8e¥¥x9a¥""
"¥"¥x8e¥x9a¥""
? Ver3.3.0 以降はこの問題は解決済みであり、エラーになることはありません。
再現コード
#include <stdio.h>
#include <string.h>
No.8
#define str(a) #a
// 文字列化演算子のマクロ
int main( void )
{
if( !strcmp( str( "字" ), "¥"字¥"" ) ) {
printf( "OK¥n" ) ;
} else {
printf( "NG¥n" ) ;
}
return( 0 ) ;
}
対応方法
Kanji filter を無効にして下さい。
コマンドライン上でコンパイルする時は、メイクファイル(*.mak) 内の "CC=xgcc_filt" を "CC=xgcc" に変更
して下さい。
IDE 上でコンパイルする時は、プロジェクトプロパティ内の Kanji filter 使用の項目を無効にして下さい。
コンパイル条件
C / C++で Kanji filter が有効な時にエラーになります。
20
GNU33 IDE 既知の問題
以下は、GNU33 IDE での既知の問題です。
不具合の内容
CDT の Scanner Config Builder 実行中にビルドがハングする
対応方法
No.1
プロジェクトプロパティ->C/C++ Make Project->Discovery Options
->Enable generate scanner info command は OFF になっております。
この設定を ON にするとビルドできなくなる場合があります。
不具合の内容
C/C++ Projects ビューのフィルタが正常動作しない
No.2
対応方法
フィルタの設定を変更した場合でも、プロジェクトを一旦閉じて開くか、
IDE を再起動しないと表示が反映されない場合があります。
不具合の内容
Problems ビューの Description の表示が空になる
対応方法
No.3
ビルド後に Include ファイル内にワーニングがあるとき、
Problems ビューで Description の表示が空になり、
エラーのアイコンが表示されることがあります。
このときビルドは成功していますが、ワーニングを排除して再ビルドすることをお勧めします。
不具合の内容
IDE 上のエディタで開いているファイルを外部のエディタで更新し、
File Changed のダイアログで No を選択したが、変更が反映される
No.4
対応方法
メニューの Window->Preferences->General->Workspace->Refresh automatically
がデフォルトで ON のため、No と選択しても変更が反映されます。
IDE 上のエディタと外部のエディタで同時に同じファイルを編集しないようにしてください。
不具合の内容
IDE で Window->Reset Perspective を選択すると、
Outline ビューでエラーが表示されることがあります。
No.5
対応方法
この場合は Outline ビューを閉じ、C/C++ Projects ビューから新しいファイルを
ダブルクリックして IDE のエディタで開いたのち、
Window->Show View->Outline で再表示させてください。
No.6
不具合の内容
21
C/C++Projects ビューでのアセンブラソースファイルのツリーの表示(ラベル等)が正しくありません。
対応方法
C/C++Projects ビューでは、アセンブラソースファイルのツリーの表示には対応しておりません。
表示の参照に関してはご注意ください。
不具合の内容
ソースウィンドウの現在行の色が 2 行になることがあります。
No.7
対応方法
ソースウィンドウでソースファイルを開いているとき、現在行を示す色つきの行が 2 行になることがあります。
この場合、エディタで表示中のファイルを開きなおし、表示を更新してください。
不具合の内容
エラーを修正してビルドしたのにソースの×印が消えないことがあります。
No.8
対応方法
ソースファイルにエラーがある状態でビルドを行うと、ソースの左側に、エラー箇所を示す×印が表示されま
す。
ソースファイル修正後にビルドしても、この×印が消えない場合があります。
不具合の内容
Windows Vista 上で、[Delete Resources]ダイアログの
[Delete project contents on disk]を選択してプロジェクトを削除しようとしたとき、
[An exception has been caught while processing the refactoring 'Delete Resource']
のエラーメッセージが表示され、プロジェクトフォルダが削除できないことがあります。
No.9
対応方法
プロジェクトをビルドした時、プロジェクトフォルダをカレントディレクトリとしてconime.exe(コマンドプロンプトで
日本語入力を可能にする)が起動し、ビルド後も終了しないため、プロジェクトフォルダが削除できなくなりま
す。
この場合には、タスクマネージャなどからconime.exe のプロセスを終了させるか、
PC を再起動させてから、プロジェクトフォルダを削除してください。
不具合の内容
Windows Vista 上で、[Rename Resources]ダイアログでプロジェクト名を変更しようとしたとき、
[‘
リソース名の変更’
のリファクタリングの処理中に例外がキャッチされました。]
のエラーメッセージが表示され、プロジェクトフォルダの変更ができないことがあります。
対応方法
No.10
プロジェクトをビルドした時、プロジェクトフォルダをカレントディレクトリとしてconime.exe(コマンドプロンプトで
日本語入力を可能にする)が起動し、ビルド後も終了しないため、プロジェクトフォルダが変更できなくなりま
す。
この場合には、タスクマネージャなどからconime.exe のプロセスを終了させるか、
PC を再起動させてから、プロジェクト名の変更をしてください。
22