このリリースでは、新しいコンパイラのサポートおよび 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-CMF | const メンバー関数をスレッドセーフにする |
CODSTA-CPP-90 | ヘッダー ファイルで using ディレクティブおよび using 宣言 (クラス スコープまたは関数スコープの using 宣言を除く) を使用してはならない |
CODSTA-CPP-91 | オーバーロードされた二項演算子は対応する複合代入演算子を使って実装するべきである |
CODSTA-CPP-92 | 多重継承階層内のすべてのアクセス可能な名前は一意でなければならない |
GLOBAL-COMPATDECLS | 1 つのオブジェクトまたは関数のすべての宣言は互換性のある型を持たなければならない |
GLOBAL-EXCSPECDECL | 例外指定付きで関数を宣言する場合、同じ関数の (他の翻訳単位にある) すべての宣言に同じ type-id のセットを付けて宣言しなければならない |
GLOBAL-ONEDEFRULE | 1 definition ルールに違反してはならない |
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 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-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-38661 | cpptestcli 実行時に log4cplus:ERROR エラーが発生する |
CPP-39168 | Windows 7 で msbuild を使用して BDF を生成できない |
CPP-39210 | サンプルの ut_ds_details_to_csv.xsl でレポート生成が失敗する (Visual Studio) |
CPP-39211 | 同じディレクトリにサブルール (テキスト ルール) があると、ユーザー ルールが実行されない場合がある |
CPP-39356 | Keil for ARM v5.x での C++11 に関連するパース エラー |
CPP-39405 | INIT-06 がデフォルトのムーブ コンストラクターに対して違反を誤検出する |
CPP-39406 | [DESKTOP] TC エディターのラジオ ボタン ルール パラメーターで適切でない選択が表示される |
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 のサポート |