OpenWatcom/Changes_in_1.6

OpenWatcom/Changes_in_1.6

まあざっくりと(無断)翻訳。

このへん→http://www.openwatcom.org/index.php/C_Compilers_Release_Changes

  • C コンパイラが修正され、オペランドがビットフィールド型である場合、signed/unsinged int 型ではなく内部的なビットフィールド型を用いるようにした。これにより C++ コンパイラとの一貫性が確保され、int 型より大きなビットフィールドが使われたときの不具合が修正される。
  • C コンパイラの #pragma aux の処理は修正している。ともかく mmintrin.h を使ったときの不具合が修正された。
  • C コンパイラが関数だけでなく変数でも __declspec を受けつけるようになった。これは C++ コンパイラとの一貫性があり、既存の呼び出し規約指定修飾子(よくわからんが __export とかのこと?)が変数に使えることとも整合している。
  • C および C++ コンパイラが修正され、変数名が呼び出し規約指定に基づき正しく定義されるようになった。これにより IBM SOM を利用するコードをビルドする際の問題が修正される。現在の挙動は OpenWatcom 1.3 およびそれ以前のものと同じになっている点に注意。
  • C コンパイラのプリプロセッサが修正され、多量(255 個以上)の引数をもつマクロを使えるようになった。
  • オプション -ri と -oe を同時に指定しても、C コンパイラは内部エラーを出さなくなった。
  • C++ コンパイラが修正され、組み込み関数(intrinsic function)をインライン化するようにした
  • 386 コンパイラで、コード最適化のデフォルトを Pentium アーキテクチャから P6 に変更。P6 向けに最適化すればたいていの場合、多少小さくて速いコードが得られる。
  • 386 の C コンパイラが修正され、flat と __far16 ポインタ間、とくに関数へのポインタが正しく変換されるようになった。やっと C++ コンパイラと互換性のある挙動になった。主に 16 ビットと 32 ビットの混在するコードを書く OS/2 ユーザにとって問題となるような不具合だった。
  • C コンパイラが修正され、最初の定義で呼び出し規約が指定されておらず、それ以降の定義でデフォルト状態と一致する呼び出し規約が指定されているというレアなケースでは、関数の再定義を認めるようになった。
  • -zwf スイッチが C、C++ コンパイラに追加。このスイッチはデフォルトではオフであり、(オンにすると)386 以降の CPU で FWAIT 命令の生成を許可する。これが必要となるのは極めてまれな状況である。
  • C コンパイラが 64 ビット整数を浮動小数点整数に正しく変換するようになった。
  • コードジェネレータは volatile 変数にかかわるメモリアクセスを省略化(merge)しなくなった。
  • コードジェネレータは 64 ビット定数の右シフトを正しく行えるようになった。(微妙に意味不明…)
  • コードジェネレータが far ポインタと 64 ビット整数とを正しく変換できるようになった。48 ビット far ポインタを 64 ビット整数に変換しようとしてもクラッシュすることはない。
  • コードジェネレータが修正され、サイズ重視最適化(-os)時のコードサイズが若干小さくなった。
  • 他のコンパイラとの互換性のため、非標準ヘッダ alloca.h を追加。
  • ライブラリ関数 strftime() が拡張され、C99 で導入された日付フォーマットがサポートされた。
  • POSIX との互換性のため、lseek() と tell() のファイルポインタ型は off_t に変更された(以前は long)。
  • 関数 _clear87() と _status87() の 386 版では NOWAIT 型の FPU 命令を使うようにした。これにより、浮動小数点例外の発生時に例外ハンドラ内でこれらの関数を使えるようになった。
  • 16 ビットの 8087 エミュレータで、乗数がゼロではなく無限大と評価されてオーバーフローとなってしまう状況がまれに存在したが修正された。
  • リソースコンパイラ(wrc)が修正され、ロング整数型の定数を RCDATA もしくはユーザデータリソース文中に 32 ビットデータとして格納するようになった。これは Win16、Win32、OS/2 ターゲットで適用される。'L' サフィックスなしの整数は 16 ビットで格納され、その範囲内に切りつめれられる。
  • リソースコンパイラの OS/2 固有部分が、RCDATA 文を正しく処理するよう修正された。
  • アセンブラ(wasm)が外部の absolute シンボルをサポートするようになった。構造体に対する演算子 SIZE、SIZEOF、LENGTH、LENGTHOF が修正された。
  • アセンブラでの特権命令の区分が、MASM と一致するように修正された。
  • アセンブラが ret 命令の式を正しく評価できるようになった。以前の場合、'ret 28+4' のようなコードは 'ret 32' でなく 'ret 28' のように間違ってアセンブルされることがありえた。
  • リンカが修正され、'STACK' クラスのセグメントのみがスタックセグメントとして認識されるようになった。以前の場合、クラス名の最後尾が 'STACK' で終わるものすべて('FSTACK' とか)がスタックセグメントと認識されていた。
  • リンカで、DOS 実行ファイル作成時の細かな不具合が修正された。
  • リンカの命令 RUNTIME が拡張され、ELF の ABI 型とバージョン指定ができるようになった。この機能は blandelf ユーティリティと同様である。詳細は Linker Guide 参照。
  • wmake ユーティリィのネイティブモードが修正され、コマンドリストのない symbolic ターゲットでは常にコマンドリストがすでに実行されてるものとみなすようになった。このため、こういった symbolic ターゲットに依存するターゲットはすべて更新不要(out of date)とみなされる。
  • Win32 のトラップファイルはデバック対象プログラム(debuggee)がロードした DLL のフルパス名を確定できるようになった。デバッガが DLL のデバッグ情報を検索することになりそうな状況でのデバッグが容易になる。
  • Win16 デバッガのトラップファイル(std.dll)が修正され、NT 系プラットフォームで 16 ビットの wdw を実行しても終了時に妙なエラーを出さなくなった。
  • Win386 エクステンダのサポートに関する多数の不具合が修正され、Win386 がまた動くようになった。
  • dumpobj ユーティリティが、additional OMF レコードをサポートするよう拡張され、新しいコマンドラインオプションが追加された。