このリリースでは、新しいコンパイラのサポートおよび MISRA 2008 などのコーディング スタンダードのサポート拡充に重点が置かれました。

新たにサポートされたコンパイラ

  • Microsoft Visual C++ 14.1x/ 2017
  • WindRiver GCC 4.8.x (静的解析のみ)
  • IAR Compiler for ARM 8.11.x

単体テストの拡張

データ ソースでの列挙値の使用が可能になりました。詳細は「列挙値の扱い」および「[実行] タブ - テストの実行方法を定義する」を参照してください。

静的解析の拡張

このリリースでは、MISRA C++ 2008 をカバーする新しい静的解析ルールが追加されました。「新規コード解析ルール」を参照してください。

MISRA C++ 2008 ルールの重要度が更新されました。

  • Required → 重要度2
  • Advisory → 重要度4
  • Document → 重要度5

フロー解析が拡張され、C++11 Thread API がサポートされました (BD-TRS ルール)。また、新規コンフィギュレーション オプションにより、以下が可能になりました。

  • noreturn 属性でターミネーター/関数を無効化する
  • [変数の値が使用されていないパスが少なくとも 1 つある場合にレポートする] オプションによる BD-PB-VOVR ルールのパラメータライズ。詳細はルールのドキュメントを参照してください。
  • インライン アセンブリ コードを通るパスに対する違反のレポートを無効化する
  • ルール パラメーターですべての汚染されたデータ ソースを有効化または無効化する

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

  • IsFinal - 関数またはクラスが 'final' または 'sealed' 指定子付きで宣言されている場合、true を返します。
  • IsExplicitFinal - 関数またはクラスが 'final' 指定子付きで宣言されている場合、true を返します。
  • IsSealed - 関数またはクラスが 'sealed' 指定子付きで宣言されている場合、true を返します。

詳細は RuleWizard 10.3.3 ユーザーズ ガイドを参照してください。

新規コード解析ルール

ルール IDヘッダー
BD-PB-PTRARR

ポインター オペランドと、そのオペランドを使用したポインター算術の結果であるポインターは、同じ配列の要素を指していなければならない

BD-TRS-CMFconst メンバー関数をスレッドセーフにする
CODSTA-CPP-90ヘッダー ファイルで using ディレクティブおよび using 宣言 (クラス スコープまたは関数スコープの using 宣言を除く) を使用してはならない
CODSTA-CPP-91オーバーロードされた二項演算子は対応する複合代入演算子を使って実装するべきである
CODSTA-CPP-92多重継承階層内のすべてのアクセス可能な名前は一意でなければならない
GLOBAL-COMPATDECLS

1 つのオブジェクトまたは関数のすべての宣言は互換性のある型を持たなければならない

GLOBAL-EXCSPECDECL例外指定付きで関数を宣言する場合、同じ関数の (他の翻訳単位にある) すべての宣言に同じ type-id のセットを付けて宣言しなければならない
GLOBAL-ONEDEFRULE1 definition ルールに違反してはならない
GLOBAL-ONEFILEDECL複数の翻訳単位で使用される型、オブジェクト、関数は 1 つのファイルでだけ宣言されなければならない
GLOBAL-ONEUSEVARプロジェクトに 1 回しか使用されない非 volatile POD 変数が含まれていてはならない
GLOBAL-TEMPLNOINSTすべてのクラス テンプレート、関数テンプレート、クラス テンプレートのメンバー関数、クラス テンプレートの静的メンバーは、少なくとも 1 回インスタンス化されなければならない
GLOBAL-UNIQUETYPEDEFtypedef 名 (修飾子があれば修飾子も) は一意の識別子でなければならない
GLOBAL-UNUSEDTYPEプロジェクトに未使用の型宣言が含まれていてはならない
GLOBAL-UNUSEDVIRTPARAMvirtual 関数およびそれをオーバーライドするすべての関数には使用されない名前付きまたは無名のパラメーターがあってはならない
GLOBAL-VIRTBASECLASS基底クラスがダイアモンド型階層内で使われる場合にだけ、virtual として宣言する
MISRA2008-0_1_12virtual 関数およびそれをオーバーライドするすべての関数には使用されない名前付きまたは無名のパラメーターがあってはならない
MISRA2008-0_1_4プロジェクトに 1 回しか使用されない非 volatile POD 変数が含まれていてはならない
MISRA2008-0_1_5プロジェクトに未使用の型宣言が含まれていてはならない
MISRA2008-0_1_6未使用の値を避ける
MISRA2008-0_1_9:すべての空でない文は、どのように実行されても1つ以上の副作用を持つか、制御フローを変えなければならない
MISRA2008-0_3_1_a配列の境界を超えてアクセスしてはならない
MISRA2008-0_3_1_bnull ポインターの間接参照を避ける
MISRA2008-0_3_1_cゼロによる除算を避ける
MISRA2008-0_3_1_d不正な書式指定子によるバッファー オーバーフローを避ける
MISRA2008-0_3_1_eゼロで終わっていない文字列の読み込みによるオーバーフローを避ける
MISRA2008-0_3_1_f間接参照の後に null チェックしない
MISRA2008-0_3_1_gバッファー読み込み時のオーバーフローを避ける
MISRA2008-0_3_1_hバッファー書き込み時のオーバーフローを避ける
MISRA2008-0_3_1_iポインタ算術は配列または配列要素を指すポインタにのみ適用する
MISRA2008-0_3_1_j>、>=、<、<= は、同じ配列を扱う場合を除き、ポインタ型に適用してはならない
MISRA2008-2_10_3typedef 名 (修飾子があれば修飾子も) は一意の識別子でなければならない
MISRA2008-3_2_11 つのオブジェクトまたは関数のすべての宣言は互換性のある型を持たなければならない
MISRA2008-3_2_21 definition ルールに違反してはならない
MISRA2008-3_2_3複数の翻訳単位で使用される型、オブジェクト、関数は 1 つのファイルでだけ宣言されなければならない

MISRA2008-3_2_4

外部リンケージを持つ識別子は、外部定義を 1 つだけ持たなければならない
MISRA2008-5_0_16_a配列の境界を超えてアクセスしてはならない
MISRA2008-5_0_16_bポインター オペランドと、そのオペランドを使用したポインター算術の結果であるポインターは、同じ配列の要素を指していなければならない
MISRA2008-5_17_1オーバーロードされた二項演算子は対応する複合代入演算子を使って実装するべきである
MISRA2008-5_19_1_a'+', '-', '*' 演算子の定数式における整数オーバーフローまたはアンダーフロー
MISRA2008-5_19_1_b'<<' 演算子の定数式における整数オーバーフローまたはアンダーフロー
MISRA2008-7_2_1列挙型を潜在型とする式は、列挙型の列挙子に対応する値だけを持つことができる
MISRA2008-7_3_6ヘッダー ファイルで using ディレクティブおよび using 宣言 (クラス スコープまたは関数スコープの using 宣言を除く) を使用してはならない
MISRA2008-10_1_2基底クラスがダイアモンド型階層内で使われる場合にだけ、virtual として宣言する
MISRA2008-10_2_1多重継承階層内のすべてのアクセス可能な名前は一意でなければならない
MISRA2008-14_5_1関連する名前空間に非メンバー ジェネリック関数を宣言しない
MISRA2008-14_6_2関数は、翻訳単位で事前に宣言されている関数に解決されなければならない
MISRA2008-14_7_1すべてのクラス テンプレート、関数テンプレート、クラス テンプレートのメンバー関数、クラス テンプレートの静的メンバーは、少なくとも 1 回インスタンス化されなければならない
MISRA2008-15_4_1例外指定付きで関数を宣言する場合、同じ関数の (他の翻訳単位にある) すべての宣言に同じ type-id のセットを付けて宣言しなければならない

MISRA2012-RULE-18_1_c

ポインター オペランドと、そのオペランドを使用したポインター算術の結果であるポインターは、同じ配列の要素を指していなければならない
PB-70列挙型を潜在型とする式は、列挙型の列挙子に対応する値だけを持つことができる
TEMPL-13関連する名前空間に非メンバー ジェネリック関数を宣言しない
TEMPL-14関数は、翻訳単位で事前に宣言されている関数に解決されなければならない

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

  • BD-PB-OVERFWR, BD-PB-OVERFRD, BD-PB-VOVR, BD-SECURITY-ARRAY, BD-TRS-LOCK, BD-TRS-TSHL
  • CODSTA-103, CODSTA-163_b
  • COMMENT-13
  • INIT-06
  • JSF-071_b, JSF-111, JSF-171, JSF-187, JSF-204_b
  • MISRA2004-14_2, MISRA2004-15_1, MISRA2004-17_2, MISRA2004-17_3, MISRA2004-17_6_a
  • MISRA2008-0_1_6, MISRA2008-0_1_9, MISRA2008-0_3_1_g, MISRA2008-0_3_1_h, MISRA2008-0_3_1_i, MISRA2008-0_3_1_j, MISRA2008-5_0_17, MISRA2008-5_0_18, MISRA2008-5_19_1_a, MISRA2008-5_19_1_b, MISRA2008-6_4_3_a, MISRA2008-6_4_4, MISRA2008-7_5_1, MISRA2008-7_5_2_a
  • MISRA2012-DIR-4_1_g, MISRA2012-DIR-4_1_h, MISRA2012-DIR-4_1_i, MISRA2012-DIR-4_1_j, MISRA2012-DIR-4_13_d, MISRA2012-DIR-4_14_a, MISRA2012-RULE-1_3_d, MISRA2012-RULE-1_3_e, MISRA2012-RULE-1_3_m, MISRA2012-RULE-2_2_a, MISRA2012-RULE-3_2, MISRA2012-RULE-10_3_b, MISRA2012-RULE-12_4_a, MISRA2012-RULE-12_4_b, MISRA2012-RULE-16_1_b, MISRA2012-RULE-16_2, MISRA2012-RULE-18_2, MISRA2012-RULE-18_3, MISRA2012-RULE-18_6_a, MISRA2012-RULE-21_17_b
  • PB-11, PB-66_a, PB-66_b

解決済みのバグおよび FR

バグ/FR ID説明
CPP-18579MISRA2012-RULE-10_3_b (CODSTA-163_b) ルールが違反を誤検出する
CPP-36999base_from_member.hpp", line 136: error: expected a ")" ::new ((void*) 0) MemberType( static_cast<T&&>(x)... ) 
CPP-38187MISRA2004-17_6_a ルールが違反を誤検出する
CPP-38241PB-11 の誤った動作
CPP-38336MISRA2004-17_6_a-3 ルールが違反を誤検出する
CPP-38342MISRA2004-15_1 ルールが default に違反を誤検出する
CPP-38589CDD ルールの C++test 10.3.2 でのリグレッション (日本語のみ)
CPP-38602RuleWizard ディクショナリに関数の C++11 "final" 指定子を追加
CPP-38661cpptestcli 実行時に log4cplus:ERROR エラーが発生する
CPP-39168Windows 7 で msbuild を使用して BDF を生成できない
CPP-39210サンプルの ut_ds_details_to_csv.xsl でレポート生成が失敗する (Visual Studio)
CPP-39211同じディレクトリにサブルール (テキスト ルール) があると、ユーザー ルールが実行されない場合がある
CPP-39356Keil for ARM v5.x での C++11 に関連するパース エラー
CPP-39405 INIT-06 がデフォルトのムーブ コンストラクターに対して違反を誤検出する
CPP-39406 [DESKTOP] TC エディターのラジオ ボタン ルール パラメーターで適切でない選択が表示される
CPP-39407static_assert へのダブル引数
CPP-39409MISRA2012-RULE-7_1 の違反誤検出
CPP-39410MISRA2012-RULE-16_4_b の違反誤検出
CPP-39415RVCT コンパイラが大文字の '--C99' を受け入れる
CPP-39495IAR EWARM 8.x のサポート
  • No labels