このリリースでは、新機能の追加のほか、既存の機能の拡張が行われました。

このリリースでのアップデート:


コンパイラのサポート

  • GNU GCC 6.x ( Windows および Linux)
  • IAR Compiler for ARM v.7.8x (Windows)
  • Renesas RX C/C++ Compiler 2.5x (Windows)
  • ARM Compiler 5.0 / ARM Compiler 5.0 for uVision: C++11 (--cpp11) のサポート更新

デスクトップでローカルに指摘事項を抑制

IDE で指摘事項を抑制する場合、抑制情報をデスクトップに保存できます。そうすると、DTP やソース管理システムを通じてチームで共有される抑制には影響を与えません。ローカルで抑制された指摘事項は、IDE 内で参照したり抑制を解除できます。詳細については、「GUI での指摘事項の抑制」 を参照してください。

ルール マップを使用した静的解析のカスタマイズ

拡張されたルール マッピング機能を使用すると、組織の開発ポリシーをすばやく簡単に実装することができます。ルール マップを作成し、ルールの重要度やカテゴリなど、C/C++test が実行する静的解析ルールのプロパティを変更したり、Development Testing Platform に保存されたテスト コンフィギュレーションにルールを 関連付けたりできます。

静的解析の拡張

このリリースでは、以下の CERT Coding Standard のほか、modern C++ standard (C++11、C++14 および C++17) の新規ルールが追加されました。詳細は「新規コード解析ルール」を参照してください。CERT C ルールは CERT C Coding Standard ビルトイン テスト コンフィギュレーションに追加されています。マッピング情報は「CERT C コンフィギュレーションの更新」を参照してください。

また、静的解析およびフロー解析によってレポートされる結果の安定性と正確性が向上しました。結果の正確さまたはルール ドキュメントに関して変更されたルールルールの一覧は「更新されたコード解析ルール」を参照してください。


MISRA C 2012 ルールの重要度が変更されました。

  • 必須 → 重要度 1
  • 必要 → 重要度 2
  • 推奨 → 重要度 4


RuleWizard モジュールが拡張され、以下のノードおよびプロパティが追加されました。

  • C/C++ Nodes> Expressions> Miscellaneous> Lambda ノード
  • C/C++ Nodes> General> Lambda Capture ノード
  • HasDefaultValue プロパティ (デフォルト値を持つルーチン パラメーターの場合に true)

詳細については『RuleWizard 10.3.2 ユーザーズ ガイド』を参照してください。

その他の拡張

  • ライセンス: ライセンス マシン ID の計算方法が更新され、AWS およびAzure クラウド環境へのデプロイメントをサポートするようになりました。

新規コード解析ルール

ルール IDヘッダー
BD-PB-BYTEORDシステム間でデータを送信する場合は正しいバイト順序を使用する
BD-PB-INVENV環境ポインターを無効化する可能性がある演算の後で環境ポインターに依存しない
BD-PB-PUTENV自動変数へのポインターを引数として putenv() を呼び出さない
BD-SECURITY-RAND疑似乱数生成器に適切なシードを指定する
BD-TRS-ARG複数の POSIX スレッドで共有されるオブジェクトは、適切な記憶域期間を持つよう宣言する
BD-TRS-BITLOCKビット フィールドを変更する場合は、ロックを使用して競合状態を防ぐ
BD-TRS-DSTRLOCK他のスレッドの mutex を破壊しない
BD-TRS-FORKFILEfork およびファイル記述子を使用する際の競合状態を避ける
BD-TRS-REVLOCK獲得されていないロックを解放しない
BD-TRS-SYMLINKシンボリック リンクの存在を確認する際の競合状態を避ける
CODSTA-127_bオブジェクト型へのポインターと 'uintptr_t' または 'intptr_t' 以外の整数型の間で変換を行うべきではない
CODSTA-150_c安全ではないマクロの引数での副作用を避ける
CODSTA-187_aより大きな整数サイズに代入する前に文字を unsigned char にキャストする
CODSTA-187_b'signed char' 型の式を配列インデックスとして使用するべきではない
CODSTA-187_cより大きな整数サイズに変換する前に文字を unsigned char にキャストするより大きな整数サイズに代入する前に文字を unsigned char にキャストする
CODSTA-188ナロー文字列とワイド文字列を混同しない
CODSTA-189ポインターに対して、スケールされた整数値の加算または減算を行わない
CODSTA-190浮動小数点値の比較にオブジェクト表現を使用しない
CODSTA-MCPP-10_aiterator ではなく const iterator を使用する
CODSTA-MCPP-10_bcbegin()、crbegin、cend()、crend() 関数を優先的に使用する
CODSTA-MCPP-13右辺値参照には std::move() を使用し、ユニバーサル参照には std::forward() を使用する
CODSTA-MCPP-15_aデフォルトのキャプチャ モードを避ける
CODSTA-MCPP-15_bデフォルトの by-reference キャプチャを使用するラムダでは、明示的に 'this' ポインターを使用する
CODSTA-MCPP-16_aなるべく raw ポインター メンバーではなくスマート ポインター メンバーを使用する
CODSTA-MCPP-16_b配列または STL コンテナーでは、なるべく raw ポインター メンバーではなくスマート ポインター メンバーを使用する
CODSTA-MCPP-16_cnew を直接使用するのではなく、できるだけ 'std::make_shared' を使用する
CODSTA-MCPP-16_dstd::auto_ptr ではなく、できるだけ std::unique_ptr を使用する
CODSTA-MCPP-17ローカル オブジェクトを参照でキャプチャするラムダを返してはならない
CODSTA-MCPP-18_aラムダ式では不要なデフォルト キャプチャ モードを避ける 
CODSTA-MCPP-18_b不要なラムダ キャプチャを避ける
GLOBAL-CONDMUTEXVAR1 つの条件変数に対する並行待機処理に複数の mutex を使用しない
SECURITY-02_b疑似乱数の生成に rand() 関数を使用しない
SECURITY-43'PTHREAD_CANCEL_ASYNCHRONOUS' 引数を指定して 'pthread_setcanceltype()' 関数を呼び出すべきではない
SECURITY-44権限を正しい順序で破棄する
SECURITY-45権限が正常に破棄されたことを確認する
SECURITY-46データをユーザー領域にコピーできる関数に構造体へのポインターを渡すべきではない
SECURITY-47シフト演算子の右辺のオペランドをチェックする際、適切な整数精度を使用する
SECURITY-48system() を呼び出さない


更新されたコード解析ルール

BD-PB-ZERO ルールに冗長モードが追加されました。

以下のルールは、結果の正確さまたはルール ドキュメントに関して変更されました。

  • BD-PB-ARRAY, BD-PB-ERRNO, BD-PB-EXCEPT, BD-PB-INTOVERF, BD-PB-NOTINIT, BD-PB-NZTS, BD-PB-SWITCH, BD-TRS-TSHL
  • CODSTA-144*, CODSTA-145*, CODSTA-150*, CODSTA-150_b*, CODSTA-161_a, CODSTA-CPP-04, CODSTA-CPP-28, CODSTA-CPP-53
  • INIT-06, INIT-07, INIT-15
  • JSF-071_b, JSF-118, JSF-174_b, JSF-177_b, JSF-180_f, JSF-180_g, JSF-209_b
  • MISRA-043_c, MISRA-043_d, MISRA-107_b, MISRA2004-6_3_b, MISRA2004-16_7, MISRA2008-7_1_1, MISRA2008-7_1_2_a, MISRA2012-DIR-4_1_a, MISRA2012-DIR-4_6_b, MISRA2012-RULE-8_13_a, MISRA2012RULE-10_1_a, MISRA2012-RULE-12_4_a*, MISRA2012-RULE-14_3_zd, MISRA2012-RULE-18_1_a
  • OOP-01
  • PB-66_a*
  • SECURITY-10, SECURITY-12*, SECURITY-25

* ドキュメントの変更

CERT C コンフィギュレーションの更新

CERT C Coding Standard ビルトイン コンフィギュレーションは、次のルール マッピングに従って、新しいルールを使用するよう変更されました。

CERT IDParasoft ID
CERT-ARR39-CCODSTA-189
CERT-CON33-CSECURITY-25
CERT-DCL39-CSECURITY-46
CERT-ENV31-CBD-PB-INVENV
CERT-ENV33-CSECURITY-48
CERT-ERR30-CBD-PB-ERRNO
CERT-FIO42-CBD-RES-LEAKS
CERT-FLP32-CBD-API-VALPARAM
CERT-FLP36-CMISRA-043_c, MISRA-043_d
CERT-FLP37-CCODSTA-190
CERT-INT30-CPB-66_a, BD-PB-INTOVERF
CERT-INT35-CSECURITY-47
CERT-INT36-CCODSTA-127_b
CERT-MSC30-CSECURITY-02_b
CERT-MSC32-CBD-SECURITY-RAND
CERT-POS30-CCODSTA-144, CODSTA-145, BD-PB-OVERFNZT
CERT-POS33-CSECURITY-10
CERT-POS34-CBD-PB-PUTENV
CERT-POS35-CBD-TRS-SYMLINK
CERT-POS36-CSECURITY-44
CERT-POS37-CSECURITY-45
CERT-POS38-CBD-TRS-FORKFILE
CERT-POS39-CBD-PB-BYTEORD
CERT-POS47-CSECURITY-43
CERT-POS48-CBD-TRS-DSTRLOCK, BD-TRS-REVLOCK
CERT-POS49-CBD-TRS-BITLOCK
CERT-POS50-CBD-TRS-ARG
CERT-POS51-CBD-TRS-ORDER
CERT-POS52-CBD-TRS-TSHL
CERT-POS53-CGLOBAL-CONDMUTEXVAR
CERT-PRE31-CCODSTA-150, CODSTA-150_b, CODSTA-150_c
CERT-STR31-CBD-PB-ARRAY, BD-PB-OVERFWR, BD-SECURITY-BUFWRITE, BD-SECURITY-OVERFWR, SECURITY-12
CERT-STR34-CCODSTA-187_a, CODSTA-187_b, CODSTA-187_c
CERT-STR38-C

CODSTA-188

解決済みの FR および PR

PR/FR ID説明
CPP-36398Eigen ライブラリ使用時に関数定義と宣言を比較する際の問題
CPP-36850C++11 inarmcc5.06 のサポートの追加
CPP-36861Renesas RX 2.05 C/C++ compiler (renrx_2_5) のサポート
CPP-36892ポインターが代入と同じ行でチェックされている場合に MISRA-107_b ルールが誤って違反をレポートする
CPP-36896GNU GCC 6 (native/host-based compiler) のサポート
CPP-36965CODSTA-CPP-53 の誤検出 "Declare local variable 'x' as const"
CPP-36966OOP-01 (Sutter Rule 54) の誤検出: "Base class copy constructor should be protected or public with smart pointer as parameter"
CPP-36967CODSTA-CPP-28 (Sutter Rule 27) の誤検出: "Base class copy constructor should be protected or public with smart pointer as parameter""Whenbinaryarithmeticoperatorsaredefined,assignmentversionsshouldbeprovidedtoo"
CPP-37005DTP の指摘事項タブ "Subcategory" ですべての C++test 指摘事項が "Unknown" と表示される
CPP-37009メンバーがクラスで直接初期化されている場合も INIT-06 ルールが違反をレポートする [C++11]
CPP-37011暗黙の signed/unsigned 型が使用されている場合、MISRA2004-6_3_b (MISRA2012-DIR-4_6_b, JSF-209_b) ルールが違反をレポートしない
CPP-37018move コンストラクターに対して CODSTA-CPP-04 ルールは違反をレポートすべきでない [C++11]
CPP-37019cwc.bin 使用時にセグメンテーション違反 (TIOBE)
CPP-37021MISRA2004-16_7 (MISRA2012-RULE-8_13_a) ルールが違反を誤検出する
CPP-37022QA: 抑制コメントでマルチバイト文字が使用された場合に抑制コメントが文字化けする
CPP-37023[VS2015] _Buffer_descriptor() restrict(amp,cpu) のパースの問題
CPP-37782BDF ファイルのソース パスが正しくスキャンされない



  • No labels