このリリースでは、新規コンパイラおよび IDE のサポートが重点的に行われたほか、MISRA 2008 などのコーディング スタンダードのサポートが拡張されました。
コンパイラのサポート
- Microsoft Visual C++ 14.1x/ 2017
- WindRiver GCC 4.8.x (静的解析のみ)
- IAR Compiler for ARM 8.11.x
IDE サポートの拡張
- Eclipse 4.7 のサポート
- Visual Studio 2017 のサポート
C/C++test DTP Engine および Parasoft DTP Plugin for Visual Studio は Visual Studio 2017 との統合をサポートします。C/C++test Desktop での Visual Studio 2017 サポートは次のバージョン 10.3.4 で行われます。
テスト コンフィギュレーション操作ワークフローの拡張
C/C++test をデスクトップで使用する際にテスト コンフィギュレーションを操作するのが容易になりました。既存のテスト コンフィギュレーションを DTP 上で複製およびカスタマイズできるほか、IDE の設定ページからテスト コンフィギュレーションを実行できます。 詳細については「カスタム テスト コンフィギュレーションの作成」および「アクティブテスト コンフィギュレーションの設定」を参照してください。
静的解析の拡張
このリリースでは、MISRA C++ 2008 を対象とする新しい静的解析ルールが追加されました。「New Code Analysis Rules」を参照してください。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-CMF | const メンバー関数をスレッドセーフにする |
CODSTA-CPP-90 | ヘッダー ファイルで using ディレクティブおよび using 宣言 (クラス スコープまたは関数スコープの using 宣言を除く) を使用してはならない |
CODSTA-CPP-91 | オーバーロードされた二項演算子は対応する複合代入演算子を使って実装するべきである |
CODSTA-CPP-92 | 多重継承階層内のすべてのアクセス可能な名前は一意でなければならない |
GLOBAL-COMPATDECLS | 1 つのオブジェクトまたは関数のすべての宣言は互換性のある型を持たなければならない |
GLOBAL-EXCSPECDECL | 例外指定付きで関数を宣言する場合、同じ関数の (他の翻訳単位にある) すべての宣言に同じ type-id のセットを付けて宣言しなければならない |
GLOBAL-ONEDEFRULE | 1 定義ルールに違反してはならない |
GLOBAL-ONEFILEDECL | 複数の翻訳単位で使用される型、オブジェクト、関数は 1 つのファイルでだけ宣言されなければならない |
GLOBAL-ONEUSEVAR | プロジェクトに 1 回しか使用されない非 volatile POD 変数が含まれていてはならない |
GLOBAL-TEMPLNOINST | すべてのクラス テンプレート、関数テンプレート、クラス テンプレートのメンバー関数、クラス テンプレートの静的メンバーは、少なくとも 1 回インスタンス化されなければならない |
GLOBAL-UNIQUETYPEDEF | typedef 名 (修飾子があれば修飾子も) は一意の識別子でなければならない |
GLOBAL-UNUSEDTYPE | プロジェクトに未使用の型宣言が含まれていてはならない |
GLOBAL-UNUSEDVIRTPARAM | virtual 関数およびそれをオーバーライドするすべての関数には使用されない名前付きまたは無名のパラメーターがあってはならない |
GLOBAL-VIRTBASECLASS | 基底クラスがダイアモンド型階層内で使われる場合にだけ、virtual として宣言する |
MISRA2008-0_1_12 | virtual 関数およびそれをオーバーライドするすべての関数には使用されない名前付きまたは無名のパラメーターがあってはならない |
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_b | null ポインターの間接参照を避ける |
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_3 | typedef 名 (修飾子があれば修飾子も) は一意の識別子でなければならない |
MISRA2008-3_2_1 | 1 つのオブジェクトまたは関数のすべての宣言は互換性のある型を持たなければならない |
MISRA2008-3_2_2 | 1 定義ルールに違反してはならない |
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 | 関数は、翻訳単位で事前に宣言されている関数に解決されなければならない |
更新されたコード解析ルール
ルール カテゴリ | ルール ID |
---|---|
フロー解析 | BD-PB-OVERFWR, BD-PB-OVERFRD, BD-PB-VOVR, BD-SECURITY-ARRAY, BD-TRS-LOCK, BD-TRS-TSHL |
Coding Conventions | CODSTA-103, CODSTA-163_b |
Comments | COMMENT-13 |
Initialization | INIT-06 |
Joint Strike Fighter | JSF-071_b, JSF-111, JSF-171, JSF-187, JSF-204_b |
MISRA 2004 | MISRA2004-14_2, MISRA2004-15_1, MISRA2004-17_2, MISRA2004-17_3, MISRA2004-17_6_a |
MISRA 2008 | 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 |
MISRA 2012 | 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 |
Possible Bugs | PB-11, PB-66_a, PB-66_b |
解決済みのバグおよび FR
バグ/FR ID | 説明 |
---|---|
CPP-18579 | MISRA2012-RULE-10_3_b (CODSTA-163_b) ルールが違反を誤検出する |
CPP-36999 | base_from_member.hpp", line 136: error: expected a ")" ::new ((void*) 0) MemberType( static_cast<T&&>(x)...) |
CPP-38187 | MISRA2004-17_6_a ルールが違反を誤検出する |
CPP-38241 | PB-11 の誤った動作 |
CPP-38336 | MISRA2004-17_6_a-3 ルールが違反を誤検出する |
CPP-38342 | MISRA2004-15_1 ルールが default に違反を誤検出する |
CPP-38589 | CDD ルールの C++test 10.3.2 でのリグレッション (日本語のみ) |
CPP-38602 | RuleWizard ディクショナリに関数の C++11 "final" 指定子を追加 |
CPP-39168 | Windows 7 で msbuild を使用して BDF を生成できない |
CPP-39211 | 同じディレクトリにサブルール (テキスト ルール) があると、ユーザー ルールが実行されない場合がある |
CPP-39356 | Keil for ARM v5.x での C++11 に関連するパース エラー |
CPP-39405 | INIT-06 がデフォルトのムーブ コンストラクターに対して違反を誤検出する |
CPP-39407 | static_assert へのダブル引数 |
CPP-39409 | MISRA2012-RULE-7_1 の誤検出 |
CPP-39410 | MISRA2012-RULE-16_4_b の違反誤検出 |
CPP-39415 | RVCT コンパイラが大文字の '--C99' を受け入れる |
CPP-39495 | IAR EWARM 8.x のサポート |