次のセクションではコンパイラに対して行われた変更について説明し、内容は次のとおりです。
C、C++、および Fortran コンパイラに対して前のリリースから次の変更が行われました。詳細は、コンパイラのマニュアルページを参照してください。C++ コンパイラに固有の変更点は、C++ コンパイラに詳しく説明されています。C コンパイラに固有の変更点は、C コンパイラに詳しく説明されています。
Oracle Developer Studio のすべてのリリースには、Oracle Sun ハードウェアサーバー用のパフォーマンス向上が含まれています。このリリースには、SPARC M6、SPARC M7、SPARC T7、SPARC S7、および Intel Broadwell/avx2_i プロセッサの拡張サポートが含まれています。
次に、C、C++、および Fortran コンパイラに影響を及ぼす、その他の変更点の一覧を示します。
SPARC M6、M7、T7、および S7 プロセッサのサポート。
x86 データ領域プロファイリングのサポート。
–xcheck には –xcheck=stkovfl という新しいデフォルトがあります。
コンパイラの新しいオプション:
–features=[no]mergestrings を指定すると、コンパイラは文字列リテラルやその他の適切な定数または読み取り専用データをバイナリの特殊セクションに入れ、そこでリンカーによって重複した文字列が削除されます。このオプションは SPARC でのみ使用できます。
–xsecure_code_analysis を指定すると、コンパイル時に、可能性のあるメモリーのセキュリティー違反を検出して表示する、コンパイラセキュアコード分析が有効になります。
–xtarget=S7、–xchip=S7 は、コンパイラドライバでサポートされています。
Fortran コンパイラは、Fortran77、Fortran90、および Fortran95 規格のための、過去最高のランタイムパフォーマンスおよび互換性オプションにより、科学技術アプリケーション開発をサポートします。Fortran 2003 の機能と OpenMP 4.0 のサポートの大部分が含まれます。Fortran コンパイラでは C および C++ コンパイラと同様のハイパフォーマンスなコード生成テクノロジが使用され、最新の SPARC および x86 ベースの Oracle システムのための最大パフォーマンスの並列コードがアプリケーションで生成されることを保証します。
Fortran コンパイラの変更点には、全コンパイラに共通の新機能および変更点に記載されている変更点と、次の変更点が含まれます。
自由プログラム形式の行の最大長が 132 文字から 250 文字に増えました。
詳細は、f95(1) のマニュアルページおよびOracle Developer Studio 12.5: Fortran ユーザーズガイドを参照してください。
C および C++ コンパイラではデフォルトで、コンパイル時のメモリーの安全性検査に関する警告が生成されます。
次のメッセージタグが含まれています。
SEC_UNINITIALIZED_MEM_READ
SEC_UNINITIALIZED_BITOP
SEC_UNDEFINED_RETURN_VALUE
SEC_ARR_OUTSIDE_BOUND_READ
SEC_ARR_OUTSIDE_BOUND_WRITE
SEC_FREED_PTR_RETURN
SEC_READ_FREED_PTR
SEC_WRITE_FREED_PTR
SEC_NULL_PTR_DEREF
これらの警告は、コンパイル時のほかのすべてのエラーや警告とともに stderr に書き出されます。それらは、コンパイル時のほかのすべてのメッセージと同様に、–erroff、–errtags、および –errwarn コマンド行オプションや error_messages() プラグマによって制御されます。
–errwarn コマンド行オプションを使用すると、メモリーの安全性検査の警告を致命的エラーに変えることができます。例:
–errwarn=SEC_NULL_PTR_DEREF を使用すると、すべての NULL ポインタ間接参照が致命的エラーになります。
–errwarn=%all を使用すると、コンパイル時のすべての警告が致命的エラーになります。
静的エラー検査は、コンパイラのバックエンド処理と並列して実行されます。高い負荷のかかっているシステムや、きわめて複雑なフロー制御を含む非常に大きなモジュールなどの特定の状況では、コンパイル時間を増やすことができます。コンパイル時間がきわめて重要なシナリオでは、コマンド行オプション –xsecure_code_analysis=no によって可能性のある重大な診断メッセージを抑制して、静的エラー検査を無効にできます。
あるいは、Oracle Developer Studio のデフォルトの config ファイル機能を使用して、サイト全体の静的エラー検査を無効にすることもできます。たとえば、構成ファイル cc.defaults または CC.defaults を使用できます。さらに、c89.defaults または c99.defaults も使用できます。インストールパスは install-dir/lib/compilers/etc/config. です。
SPRO_DEFAULTS_PATH 環境変数を使用すると、メイクファイルを変更しなくてもデフォルトの静的エラー検査を無効にできます。SPRO_DEFAULTS_PATH=path の path は、デフォルトのファイルが含まれているディレクトリです。
error_messages() プラグマを使用すると、指定されたソースファイルの領域に従って SEC メッセージを選択的に有効および無効にできます。
次の例は、ある特定の文で SEC の特定の警告を無効にする方法を示しています。
cat foo.c: <some code> #pragma error_messages (off, tag-of-interest) <statement of interest> #pragam error_messages (default|on, tag-of-interest) <remainder of code>
ここで、tag-of-interest は SEC のフロントエンドで生成される警告の 1 つです。
コードの領域内のすべての SEC 警告を無効にするには:
cat foo.c: <some code> #pragma error_messages (off, SEC_UNINITIALIZED_MEM_READ,SEC_UNINITIALIZED_BITOP, SEC_UNDEFINED_RETURN_VALUE,SEC_ARR_OUTSIDE_BOUND_READ, SEC_ARR_OUTSIDE_BOUND_WRITE,SEC_DOUBLE_FREE,SEC_FREED_PTR_RETURN,SEC_READ_FREED_PTR, SEC_WRITE_FREED_PTR,SEC_NULL_PTR_DEREF ) line-or-lines-of-interest #pragam error_messages (default|on, SEC_UNINITIALIZED_MEM_READ,SEC_UNINITIALIZED_BITOP, SEC_UNDEFINED_RETURN_VALUE, SEC_ARR_OUTSIDE_BOUND_READ,SEC_ARR_OUTSIDE_BOUND_WRITE,SEC_DOUBLE_FREE,SEC_FREED_PTR_RETURN, SEC_READ_FREED_PTR,SEC_WRITE_FREED_PTR, SEC_NULL_PTR_DEREF ) <remainder of code>