このリリースでは、サポート対象環境の拡充と C/C++test のセキュリティテスト機能の強化に重点が置かれました。

環境のサポート

新しいコンパイラのサポート

新たに以下のコンパイラがサポートされました。

コンパイラ名コンパイラ略称
GNU GCC 8.xgcc_8
GNU GCC 8.x (x86_64)gcc_8-64
IAR Compiler for RL78 v. 3.10.xiccrl78_3_10

非推奨のコンパイラ

以下のコンパイラはサポートされなくなりました。

コンパイラ名コンパイラ略称
Analog Devices C/C++ Compiler 7.0 for ADSP SHARCad21k_7_0
Analog Devices C/C++ Compiler 7.0 for ADSP TigerSHARCadts_7_0
CodeSourcery Sourcery G++ Lite 2007q3-51csgccarm_4_2

現在サポートされているコンパイラについては「コンパイラ」を参照してください。

新規 IDE

コードの静的解析や自動単体テスト、カバレッジの収集など、C/C++test のすべてのテスト機能を以下の IDE と統合して利用できるようになりました。

テスト ケース エディターの拡張

テスト ケース エディターが拡張され、データ ソースの指定した値を使用してテスト ケースを自動的にパラメータライズできるようになりました。以下が可能です。

  • パラメータライズされたテスト ケースの作成 – テスト ケースと、テスト ケースのパラメータライズに使用する新規データ ソースの両方を生成します。詳細については「テスト ケースを作成する」を参照してください。
  • 既存のデータ ソースを使用してパラメータライズされたテスト ケースを作成 - 詳細については「テスト ケース パラメータライゼーションの追加」を参照してください。

コンプライアンス パックの拡張

セキュリティ コンプライアンス パックが拡張され、CERT C および CERT C++ セキュリティ標準のコンプライアンス推進に役立つようになりました。

CERT C

  • SEI CERT C コーディング標準ルールの推進に役立つ SEI CERT C Rules テスト コンフィギュレーションが追加されました。 
  • SEI CERT C コーディング標準ルールおよびガイドラインの推進に役立つ SEI CERT C Coding Guidelines テスト コンフィギュレーションが追加されました。

CERT C++

  • SEI CERT C++ コーディング標準ルールの推進に役立つ SEI CERT C++ Rules テスト コンフィギュレーションが追加されました。

(info) コンプライアンス パックを使用するには、専用のライセンス機能を有効化する必要があります。コンプライアンス パック ライセンスの詳細については、Parasoft 製品サポートにご連絡ください。

フロー解析の改善

  • フロー解析結果の表示が改善され、指摘事項が理解しやすくなりました。
  • フロー解析にリソースが開かれているかどうかをチェックする関数のほか、閉じられたリソースに対して呼び出しても安全な関数を指定できるオプションが追加されました (「フロー解析 - [リソース] タブ」を参照)。
  • フロー解析での std::nullptr_t 型のサポートが改善されました。

追加または更新されたテスト コンフィギュレーション

以下のビルトイン テスト コンフィギュレーションが追加されました。

  • SEI CERT C++ Rules
  • SEI CERT C Rules
  • Run VxWorks DKM Application with Full Monitoring (File System, WRWB 4.x)
  • Run VxWorks DKM Unit Tests (File System, WRWB 4.x)
  • Run VxWorks RTP Application with Full Monitoring (File System, WRWB 4.x)
  • Run VxWorks RTP Unit Tests (File System, WRWB 4.x)

C/C++test に付属するテスト コンフィギュレーションの一覧は「ビルトイン テスト コンフィギュレーション」を参照してください。

非推奨のテスト コンフィギュレーション

以下のテスト コンフィギュレーションは非推奨になりました。

  • CERT C Coding Standard
  • CRules
  • DISA-STIG Coding Standard
  • Ellemtel
  • ISO 26262 Recommended Rules
  • MISRA C 2012 Legacy
  • OWASP Top 10 Security Vulnerabilities
  • Parasoft's Recommended FDA C++ Phase 1
  • Parasoft's Recommended FDA C++ Phase 2
  • Parasoft's Recommended FDA C++ Phase 3
  • Parasoft's Recommended Rules
  • SAMATE Annex A Source Code Weaknesses

非推奨のテスト コンフィギュレーションは、デフォルトでは利用できません。チーム共有またはユーザー定義コンフィギュレーションとして適用することはできます (「テストコンフィギュレーションのエクスポートとインポート」を参照)これらのテスト コンフィギュレーションは、次の場所にあります: [INSTALL_DIR]/configs/deprecated

追加または更新された解析ルール

このリリースでは、新規静的解析ルールの追加により、コンプライアンス標準のカバー範囲が広がりました。追加または更新されたルールの一覧は「新規ルール 」および「更新されたルール」を参照してください。

その他の変更

  • Microsoft Team Foundation Server 2008 はサポートされなくなりました。

解決済みのバグおよび FR

バグ/FR ID

説明

CPP-18534

WindRiver Workbench 4.0 IDE のサポート

CPP-33421

"asm goto" gcc 拡張のサポートを追加 (Linux Kernel Module)

CPP-39308

MDK-ARM ARM 6 コンパイラのサポート

CPP-40407

マクロのコードに対して SA ルールの違反が検出された場合、誤った行に違反が表示される

CPP-40551

const/volatile オブジェクトから参照型へのキャストをレポートするよう MISRA2004-11_5 ルールを拡張

CPP-40553

新規ルール: CODSTA-MCPP-22 範囲ベースの for ループでは auto 宣言に対して明示的な参照修飾子を使用するCODSTA-MCPP-22 範囲ベースの for ループでは auto 宣言に対して明示的な参照修飾子を使用する

CPP-40623

Clang: 未定義および矛盾するビルトインの修正

CPP-40695

VS2017 プラグインの登録をユーザー固有にしない

CPP-40771

新規ルール CODSTA-201: 構造化テキストデータをネイティブに処理しない

CPP-40772

新規ルール CODSTA-199: 運用コード内でアサーションを使用しない

CPP-40773

新規ルール OOP-54: オーバーライドされたメソッドまたは隠されたメソッドのアクセシビリティを引き上げてはならない

CPP-40774

新規ルール: PORT-29 データをファイルに書き込む関数に構造体へのポインターを渡すべきではない

CPP-40775

新規ルール CODSTA-82_b: 空の無限ループを使用しない

CPP-41516

CODSTA-16 ルールが enum または const 型のサイズに対して違反をレポートしない

CPP-41517

RW: RW: Missing information about va_list being builtin/predeclared type.

CPP-41520

自動されたテスト ケースの Enum 型への参照がコンパイルの問題を引き起こす

CPP-41525

MISRA2004-10_4 (CODSTA-198) ルールは非複合型式のキャストに対して違反をレポートするべきではない

CPP-41530

CODSTA-30 参照として渡されたパラメーターに対して違反が誤検出される

CPP-41541

asm 文が使用されている場合、ファスト カバレッジ インストゥルメンテーションでコンパイル エラーが発生する

CPP-41553

Eclipse 4.8 IDE のサポート

CPP-41586

ワイド文字列が wchar_type へのポインターに代入されている場合に PB-27 ルールが違反をレポートしない (linux 上の gcc)

CPP-41605

error: this statement is not allowed inside of a statement expression

CPP-41611

新規ルール: CODSTA-MCPP-22 範囲ベースの for ループでは auto 宣言に対して明示的な参照修飾子を使用するJSF-37

CPP-41614

arasoft's Recommended Rules テスト コンフィギュレーションを非推奨にする

CPP-41646

GNU GCC 8.x コンパイラのサポート

CPP-41671

IAR RL78 v3.10 コンパイラのサポート

CPP-41709

MISRA2012-RULE.21_2_b および MISRA2012-RULE.21_2_c va_list の問題

CPP-41741

'Variables' ノードのプロパティ 'Entity' は初期化子で使用されている変数を返す

CPP-41744

MISRA2012-RULE-20_12 の誤検出

CPP-41748

テスト ケース エディター: テスト ケースの自動パラメータライズ

CPP-41750

MDK ARM/uVision 5 IDE のサポート

CPP-41831

RULE_OUTPUT_CHANGE NAMING-HN ルールの出力メッセージの誤り

CPP-41840

C/C++test レポートの抑制レコードでルール ID が壊れている

CPP-41842

RULE_OUTPUT_CHANGE PB-44 ルールの出力メッセージを改善する必要がある

CPP-41866

テスト ケースエディターでのパラメータライズ テスト ケースの作成

CPP-41868

cpptestcc でインストゥルメントする際の警告

CPP-41871

論理行がない場合、CLLOCRIF, CLLOCRIT, CLLOCRIM の値をレポートしない

CPP-41944

HICPP-16_1_5-a ルールが DTP サーバーの統合パッケージに含まれていない (DTP サーバーで利用できない)

CPP-41977

DTP からインポートした後に違反が重複する

CPP-42042

internal error: assertion failed at: "lookup.c", line 2738"lookup.c", line 2738

CPP-42070

VS2017 プラグインを複数ユーザーにインストールする機能をサポート

CPP-42075

MRM-40 ルールは、コピーが無効化されている場合に違反をレポートするべきではない

FA-6689dynamic_cast が使用されているとき、BD-PB-NP ルールが違反をレポートしない
FA-6649BD-PB-CC の bit-AND に対する違反誤検出
FA-6611リソースがキャストされている場合に BD-RES-LEAKS ルールが違反を誤検出する
FA-6453"&(ptr->field)" 演算に対し、シミュレーションが誤ってポインター間接参照を仮定する
FA-5769BD-PB-CHECKRET ルールの違反メッセージに行番号が含まれている



新規ルール

以下のルールが追加されました。

ルール ID

ヘッダー

AUTOSAR-A15_5_2-bcstdlib ライブラリの関数 abort()、quick_exit()、_Exit() は使用してはならない
AUTOSAR-A15_5_3-bデストラクタ、割り当て解除、スワップから例外をスローしてはならない
AUTOSAR-A15_5_3-cデストラクタの中から throw を行ってはいけない

AUTOSAR-A15_5_3-d

他では処理されていないすべての例外をキャッチする例外ハンドラを少なくとも 1 つ用意するべきである

AUTOSAR-A15_5_3-e

空のスロー (throw;) は catch ハンドラの複合文でだけ使用する
AUTOSAR-A15_5_3-fプログラムの起動フェーズの後、終了フェーズの前にだけ例外をスローする

AUTOSAR-A15_5_3-g

明示的にスローされる例外はその場所に至るすべての呼び出しパスに互換性のある型のハンドラがなければならない
AUTOSAR-A15_5_3-h関数の宣言に例外指定がある場合、関数は指定された型の例外だけをスローできる

AUTOSAR-A15_5_3-i

グローバルまたは名前空間のスコープで呼び出される関数は、処理されない例外をスローしてはならない
AUTOSAR-A15_5_3-j例外を常にキャッチする
AUTOSAR-A15_5_3-k終了ハンドラーを適切に定義する
AUTOSAR-A5_1_4-b外側のラムダから参照によってローカル オブジェクトをキャプチャしてはならない
AUTOSAR-A5_1_4-cローカル オブジェクトを参照によってキャプチャするラムダは、より長い存続期間を持つ変数に代入するべきではない
BD-CO-EMPCONstd アルゴリズムに空のコンテナー イテレーターを宛先として渡さない
BD-CO-STRMOD有効な参照、ポインター、イテレーターを使用して basic_string の要素を参照する
BD-PB-NEWHANnew ハンドラーを適切に定義する
BD-PB-POLARR配列をポリモーフィックに処理しない
BD-PB-PTRCMP関連のない 2 つのポインターを比較してはならない
BD-PB-PTRVALUEすでに所有されているポインター値を関連がないスマート ポインターに格納しない
BD-PB-SUBSEQMOVE移動元オブジェクトの値に依存しない
BD-PB-TERMHAN終了ハンドラーを適切に定義する
BD-PB-UNEXPHANunexpected ハンドラーを適切に定義する
BD-PB-VALRANGEコンテナーのインデックスが有効範囲内であることを保証する

CERT_C-ARR02-a

初期化子内の配列宣言に明示的に配列の上限を指定する
CERT_C-DCL10-aprintf 関数の呼び出しで、書式文字列のタグの数と対応する引数の数は同じでなければならない

CERT_C-DCL11-a

printf 関数の呼び出しで、書式文字列の '%s' または '%c' タグと対応する引数の間に不整合があってはならない

CERT_C-DCL11-b

printf 関数の呼び出しで、書式文字列の '%f' タグと対応する引数の間に不整合があってはならない

CERT_C-DCL11-c

printf 関数の呼び出しで、書式文字列の '%i' または '%d' タグと対応する引数の間に不整合があってはならない
CERT_C-DCL11-dprintf 関数の呼び出しで、書式文字列の '%u' タグと対応する引数の間に不整合があってはならない
CERT_C-DCL11-eprintf 関数の呼び出しで、書式文字列の '%p' タグと対応する引数の間に不整合があってはならない

CERT_C-DCL11-f

 printf 関数の呼び出しで、書式文字列のタグの数と対応する引数の数は同じでなければならない
CERT_C-ERR01-aエラー指示子 errno は、用いてはならない
CERT_C-ERR02-a標準ライブラリの入出力関数を使用してはいけない
CERT_C-ERR06-aアサーションを使用しない

CERT_C-ERR07-b

標準ライブラリの入出力関数を使用してはいけない

CERT_C-EXP15-a

疑わしいセミコロンの使用
CERT_C-FIO22-aリソースが解放されていることを確認する
CERT_C-FIO24-aファイル アクセス時の競合状態を避ける

CERT_C-FIO32-a

ファイル名インジェクションから防御する
CERT_C-INT08-a整数のオーバーフローを避ける
CERT_C-INT15-a基本型の char、int、short、long、float および double を使用しない。代わりに特定の長さの typedef を使用する
CERT_C-MEM00-d解放されたリソースを使用してはならない
CERT_C-MEM00-eリソースが解放されていることを確認する
CERT_C-MEM02-a代入演算子のオペランドの型には互換性がなければならない

CERT_C-MEM02-b

関数の戻り値を互換性のない型の変数に代入してはならない
CERT_C-MEM04-aライブラリ関数に渡される値については、その妥当性をチェックしなければならない
CERT_C-MEM05-a再帰を使用しない
CERT_C-MEM05-b可変長配列のサイズが有効範囲内であることを確認する

CERT_C-MEM07-a

ライブラリ関数に渡される値については、その妥当性をチェックしなければならない
CERT_C-MSC40-a外部リンケージを持つ関数のインライン定義には、静的オブジェクトの定義や使用が含まれていてはならない

CERT_C-MSC41-a

文字列リテラルをハード コードしない

CERT_C-STR05-a

文字列リテラルを変更してはならない

CERT_CPP-CON50-a

他のスレッドの mutex を破壊しない
CERT_CPP-CON51-amutex に対して直接 lock() を呼び出さない
CERT_CPP-CON52-aビット フィールドを変更する場合は、ロックを使用して競合状態を防ぐ
CERT_CPP-CON53-a 異なる順序でロックを獲得しない
CERT_CPP-CON54-a不正に再開される可能性がある関数をループに入れる
CERT_CPP-CON55-a複数のスレッドが同じ条件変数を待機している場合、'notify_one()' 関数を使用しない
CERT_CPP-CON56-a二重ロックを避ける

CERT_CPP-CTR50-a

コンテナーのインデックスが有効範囲内であることを保証する

CERT_CPP-CTR51-a

コンテナーを反復処理中に変更しない

CERT_CPP-CTR52-a

std アルゴリズムに空のコンテナー イテレーターを宛先として渡さない

CERT_CPP-CTR53-a

実際には範囲ではないイテレータ範囲を使用してはならない

CERT_CPP-CTR53-b

コンテナーが異なるイテレーターを比較しない

CERT_CPP-CTR54-a

コンテナーが異なるイテレーターを比較しない

CERT_CPP-CTR54-b

関連のない 2 つのポインターを比較してはならない

CERT_CPP-CTR55-a

1 より大きい値の定数をイテレーターに加算またはイテレーターから減算してはならない

CERT_CPP-CTR56-a

配列をポリモーフィックに処理しない

CERT_CPP-CTR56-b

派生クラス オブジェクトの配列を指すポインターを、基底クラスのポインターに変換してはいけない

CERT_CPP-CTR56-c

配列をポリモーフィックに処理しない

CERT_CPP-CTR57-a

等しい値に対して true を返す比較関数を連想コンテナに使用しない

CERT_CPP-CTR58-a

述語を純粋関数にする

CERT_CPP-DCL50-a

可変個引数を持つ関数を定義してはならない

CERT_CPP-DCL51-a

名前がアンダースコアで始まる識別子を #define または #undef してはならない

CERT_CPP-DCL51-b

予約済み識別子を再定義してはならない

CERT_CPP-DCL51-c

defined 識別子を #define または #undef してはならない

CERT_CPP-DCL51-d

標準ライブラリのマクロ、オブジェクト、関数の名前を再利用してはならない

CERT_CPP-DCL51-e

標準ライブラリのマクロ、オブジェクト、関数の名前を再利用してはならない (C90)

CERT_CPP-DCL51-f

標準ライブラリのマクロ、オブジェクト、関数の名前を再利用してはならない (C99)

CERT_CPP-DCL52-a

参照型を const または volatile で修飾してはならない

CERT_CPP-DCL53-a

常にファイル スコープで関数を宣言する

CERT_CPP-DCL53-b

ローカルまたは関数プロトタイプ スコープで宣言された識別子は、グローバルまたは名前空間のスコープで宣言された識別子を隠蔽してはならない

CERT_CPP-DCL54-a

new と delete はいつも一緒に提供する

CERT_CPP-DCL55-a

データをユーザー領域にコピーできる関数に構造体へのポインターを渡すべきではない

CERT_CPP-DCL56-a

ローカルでない静的オブジェクトをローカルな static オブジェクトに置き換えることで、異なる翻訳単位にあるオブジェクトの初期化の順序に関する問題を避ける

CERT_CPP-DCL57-a

デストラクタ、割り当て解除、スワップから例外をスローしてはならない

CERT_CPP-DCL57-b

例外を常にキャッチする

CERT_CPP-DCL58-a

標準の名前空間 std および posix を変更してはならない

CERT_CPP-DCL59-a

ヘッダー ファイルに無名の名前空間があってはならない

CERT_CPP-DCL60-a

クラス、共用体、列挙型の名前 (修飾子があれば修飾子も) は一意の識別子でなければならない

CERT_CPP-ERR50-a

'std::atexit()' または 'std::at_quick_exit()' で登録された関数の実行は、例外によって終了すべきではない

CERT_CPP-ERR50-b

デストラクタ、割り当て解除、スワップから例外をスローしてはならない

CERT_CPP-ERR50-c

デストラクタの中から throw を行ってはいけない

CERT_CPP-ERR50-d

他では処理されていないすべての例外をキャッチする例外ハンドラを少なくとも 1 つ用意するべきである

CERT_CPP-ERR50-e

空のスロー (throw;) は catch ハンドラの複合文でだけ使用する

CERT_CPP-ERR50-f

プログラムの起動フェーズの後、終了フェーズの前にだけ例外をスローする

CERT_CPP-ERR50-g

明示的にスローされる例外はその場所に至るすべての呼び出しパスに互換性のある型のハンドラがなければならない

CERT_CPP-ERR50-h

関数の宣言に例外指定がある場合、関数は指定された型の例外だけをスローできる

CERT_CPP-ERR50-i

グローバルまたは名前空間のスコープで呼び出される関数は、処理されない例外をスローしてはならない

CERT_CPP-ERR50-j

例外を常にキャッチする

CERT_CPP-ERR50-k

終了ハンドラーを適切に定義する

CERT_CPP-ERR50-l

cstdlib ライブラリの関数 abort()、quick_exit()、_Exit() は使用してはならない

CERT_CPP-ERR51-a

例外を常にキャッチする

CERT_CPP-ERR51-b

明示的にスローされる例外はその場所に至るすべての呼び出しパスに互換性のある型のハンドラがなければならない

CERT_CPP-ERR52-a

setjmp マクロと longjmp 関数は、用いてはならない

CERT_CPP-ERR52-b

<setjmp.h> ヘッダーをインクルードしてはいけない

CERT_CPP-ERR53-a

コンストラクタまたはデストラクタの関数監視ブロックのハンドラは、そのクラスまたは基底クラスの静的でないメンバを参照してはならない

CERT_CPP-ERR54-a

1 つの try-catch 文または関数監視ブロックに派生クラスおよびそのすべてまたは一部の基底クラスのハンドラがある場合、最後に派生されたクラスから基底クラスへの順でハンドラを記述する

CERT_CPP-ERR55-a

関数の宣言に例外指定がある場合、関数は指定された型の例外だけをスローできる

CERT_CPP-ERR56-a

リソースが解放されていることを確認する

CERT_CPP-ERR57-a

リソースが解放されていることを確認する

CERT_CPP-ERR58-a

プログラムの起動フェーズの後、終了フェーズの前にだけ例外をスローする

CERT_CPP-ERR59-a

実行境界を越えて例外をスローしてはならない

CERT_CPP-ERR60-a

例外オブジェクトは例外をスローせずにコピー作成可能でなければならない

CERT_CPP-ERR60-b

'std::exception' を継承するクラスに明示的に宣言されたコピー コンストラクターは、例外をスローしない仕様を持たなければならない

CERT_CPP-ERR61-a

クラス型の例外は常に参照でキャッチする

CERT_CPP-ERR61-b

値でスローし、参照でキャッチする

CERT_CPP-ERR62-a

<stdlib.h>ライブラリのライブラリ関数 atof、atoi、atol は、用いてはならない

CERT_CPP-EXP50-a

式の値は、規格が認めるどのような順序で評価されようとも、同じでなければならない

CERT_CPP-EXP50-b

関数の引数の評価順序に依存するコードを書いてはならない

CERT_CPP-EXP50-c

関数呼び出しおよび関数引数の評価順序に依存するコードを記述してはならない

CERT_CPP-EXP50-d

関数呼び出しを含む式の評価順序に依存するコードを書いてはならない

CERT_CPP-EXP50-e

オブジェクトは、シーケンス ポイントの間で、格納された値が式の評価によって 2 回以上変更されてはならない

CERT_CPP-EXP50-f

関数呼び出しの評価順序に依存するコードを書いてはならない

CERT_CPP-EXP51-a

配列をポリモーフィックに処理しない

CERT_CPP-EXP52-a

sizeof 演算子のオペランドに副作用を持つ式が含まれていてはならない

CERT_CPP-EXP52-b

sizeof 演算子のオペランドで volatile 左辺値として指定されたオブジェクトにアクセスするべきではない

CERT_CPP-EXP52-c

副作用を持つ関数の呼び出しを sizeof 演算子のオペランドとして使用してはならない

CERT_CPP-EXP53-a

初期化の前に使用しない

CERT_CPP-EXP54-a

解放されたリソースを使用してはならない

CERT_CPP-EXP54-b

自動記憶域のオブジェクトのアドレスを関数から返してはいけない

CERT_CPP-EXP54-c

自動記憶域のオブジェクトのアドレスを、オブジェクトが存在しなくなった後にも存在し続ける可能性がある別のオブジェクトに代入してはならない

CERT_CPP-EXP55-a

キャストによってポインターまたは参照型から const または volatile 修飾子を取り除いてはならない

CERT_CPP-EXP56-a

別の言語リンケージで関数を呼び出さない

CERT_CPP-EXP57-a

削除の時点で不完全なオブジェクトを削除してはならない

CERT_CPP-EXP57-b

不完全型へのポインターと他の型との間で変換を行ってはならない

CERT_CPP-EXP58-a

可変引数のマクロを正しく使用する

CERT_CPP-EXP60-a

実行境界を越えて非標準レイアウト型のオブジェクトを渡してはならない

CERT_CPP-EXP61-a

ローカル オブジェクトを参照でキャプチャするラムダを返してはならない

CERT_CPP-EXP61-b

外側のラムダから参照によってローカル オブジェクトをキャプチャしてはならない

CERT_CPP-EXP61-c

ローカル オブジェクトを参照によってキャプチャするラムダは、より長い存続期間を持つ変数に代入するべきではない

CERT_CPP-EXP63-a

移動元オブジェクトの値に依存しない

CERT_CPP-FIO50-a

間にフラッシュまたは位置付けの処理を呼び出さずに交互にストリームの入力と出力を行ってはならない

CERT_CPP-FIO51-a

リソースが解放されていることを確認する

CERT_CPP-INT50-a

列挙型を潜在型とする式は、列挙型の列挙子に対応する値だけを持つことができる

CERT_CPP-MEM50-a

解放されたリソースを使用してはならない

CERT_CPP-MEM51-a

対応する new/malloc および delete/free の呼び出しでは、同じ形式を使用する

CERT_CPP-MEM51-b

対応する new/malloc および delete/free の呼び出しでは、同じ形式を使用する

CERT_CPP-MEM51-c

非自明なデストラクターがあるクラスには、コピー コンストラクターおよびコピー代入演算子も宣言するべきである

CERT_CPP-MEM52-a

new の戻り値をチェックする

CERT_CPP-MEM52-b

関数のパラメータの評価順は未定義であるため、関数の引数リストでリソースを割り当てない

CERT_CPP-MEM53-a

コンストラクタのあるオブジェクトに対し malloc/realloc を呼び出さない

CERT_CPP-MEM55-a

ユーザー定義の new 演算子は、割り当てが失敗した場合、std::bad_alloc 例外をスローするべきである

CERT_CPP-MEM56-a

すでに所有されているポインター値を関連がないスマート ポインターに格納しない

CERT_CPP-MSC50-a

疑似乱数の生成に rand() 関数を使用しない

CERT_CPP-MSC51-a

疑似乱数生成器に適切なシードを指定する

CERT_CPP-MSC52-a

戻り値の型が非 void の関数の場合、すべての出口で、式を持つ明示的な return 文を記述しなければならない

CERT_CPP-MSC53-a

return するべきでない関数から return してはならない

CERT_CPP-MSC54-a

シグナル ハンドラーを適切に定義する

CERT_CPP-OOP50-a

コンストラクターから仮想関数を呼び出してはいけない

CERT_CPP-OOP50-b

デストラクターから仮想関数を呼び出してはいけない

CERT_CPP-OOP50-c

コンストラクターからクラスの仮想関数を呼び出さない

CERT_CPP-OOP50-d

デストラクターからクラスの仮想関数を呼び出さない

CERT_CPP-OOP51-a

関数引数および戻り値のスライシングを避ける

CERT_CPP-OOP52-a

基底クラスとして使用される仮想関数を持つクラスに仮想デストラクタを定義する

CERT_CPP-OOP53-a

宣言された順にメンバを初期化リストに記述する

CERT_CPP-OOP54-a

operator= での自分自身への代入をチェックする

CERT_CPP-OOP55-a

関数へのポインタを他のポインタ型にキャストで変換してはならない

CERT_CPP-OOP56-a

終了ハンドラーを適切に定義する

CERT_CPP-OOP56-b

unexpected ハンドラーを適切に定義する

CERT_CPP-OOP56-c

new ハンドラーを適切に定義する

CERT_CPP-OOP57-a

C の標準ライブラリ関数を使用してノントリビアル クラス型のオブジェクトを初期化してはならない

CERT_CPP-OOP57-b

C の標準ライブラリ関数を使用して非標準レイアウト クラス型のオブジェクトを比較してはならない

CERT_CPP-OOP58-a

コピー演算はソース オブジェクトを変更してはならない

CERT_CPP-STR50-a

配列ではなく vector や string を使用する

CERT_CPP-STR51-a

null ポインターの間接参照を避ける

CERT_CPP-STR52-a

有効な参照、ポインター、イテレーターを使用して basic_string の要素を参照する

CERT_CPP-STR53-a

コンテナーのインデックスが有効範囲内であることを保証する

CODSTA-197

文字列リテラルで初期化される文字配列の上限を指定しない

CODSTA-199

アサーションを使用しない

CODSTA-200

初期化子内の配列宣言に明示的に配列の上限を指定する

CODSTA-201

構造化テキストデータをネイティブに処理しない

CODSTA-202

外部リンケージを持つ関数のインライン定義には、静的オブジェクトの定義や使用が含まれていてはならない

CODSTA-203

文字列リテラルをハード コードしない

CODSTA-82_b

空の無限ループを使用しない

CODSTA-CPP-93

C の標準ライブラリ関数を使用してノントリビアル クラス型のオブジェクトを初期化してはならない

CODSTA-CPP-94

C の標準ライブラリ関数を使用して非標準レイアウト クラス型のオブジェクトを比較してはならない

CODSTA-CPP-95

標準の名前空間 std および posix を変更してはならない

CODSTA-CPP-96

別の言語リンケージで関数を呼び出さない

CODSTA-CPP-97

参照型を const または volatile で修飾してはならない

CODSTA-CPP-98

コピー演算はソース オブジェクトを変更してはならない

CODSTA-MCPP-17_b

外側のラムダから参照によってローカル オブジェクトをキャプチャしてはならない

CODSTA-MCPP-17_c

ローカル オブジェクトを参照によってキャプチャするラムダは、より長い存続期間を持つ変数に代入するべきではない

CODSTA-MCPP-22

範囲ベースの for ループでは auto 宣言に対して明示的な参照修飾子を使用する

EXCEPT-19

例外オブジェクトは例外をスローせずにコピー作成可能でなければならない

EXCEPT-20

'std::exception' を継承するクラスに明示的に宣言されたコピー コンストラクターは、例外をスローしない仕様を持たなければならない

JSF-037

ファイルは、コンパイルに必要な宣言および定義を含むヘッダーだけを直接的にインクルードするべきである

MISRA2008-15_5_3_b

デストラクタ、割り当て解除、スワップから例外をスローしてはならない

MISRA2008-15_5_3_c

デストラクタの中から throw を行ってはいけない

MISRA2008-15_5_3_d

他では処理されていないすべての例外をキャッチする例外ハンドラを少なくとも 1 つ用意するべきである

MISRA2008-15_5_3_e

空のスロー (throw;) は catch ハンドラの複合文でだけ使用する

MISRA2008-15_5_3_f

プログラムの起動フェーズの後、終了フェーズの前にだけ例外をスローする

MISRA2008-15_5_3_g

明示的にスローされる例外はその場所に至るすべての呼び出しパスに互換性のある型のハンドラがなければならない

MISRA2008-15_5_3_h

関数の宣言に例外指定がある場合、関数は指定された型の例外だけをスローできる

MISRA2008-15_5_3_i

グローバルまたは名前空間のスコープで呼び出される関数は、処理されない例外をスローしてはならない

MISRA2008-15_5_3_j

例外を常にキャッチする

MISRA2008-15_5_3_k

終了ハンドラーを適切に定義する

MRM-53ユーザー定義の new 演算子は、割り当てが失敗した場合、std::bad_alloc 例外をスローするべきである

OOP-54

オーバーライドされたメソッドまたは隠されたメソッドのアクセシビリティを引き上げてはならない

OPT-41

ファイルは、コンパイルに必要な宣言および定義を含むヘッダーだけを直接的にインクルードするべきである

PB-74

1 より大きい値の定数をイテレーターに加算またはイテレーターから減算してはならない

PB-75

cstdlib ライブラリの関数 abort()、quick_exit()、_Exit() は使用してはならない

PORT-29

データをファイルに書き込む関数に構造体へのポインターを渡すべきではない

PORT-30

実行境界を越えて例外をスローしてはならない

PORT-31

実行境界を越えて非標準レイアウト型のオブジェクトを渡してはならない

SECURITY-50

複数のスレッドが同じ条件変数を待機している場合、'notify_one()' 関数を使用しない


更新されたルール

解析結果の向上のため、以下の静的解析ルールが更新されました。

ルール カテゴリ

ルール ID

AUTOSAR C++14 Coding Guidelines

AUTOSAR-A12_0_1-a, AUTOSAR-A15_1_4-a, AUTOSAR-A15_5_2-a, AUTOSAR-A15_5_3-a, AUTOSAR-A15_5_3-b, AUTOSAR-A2_14_2-a, AUTOSAR-A5_2_2-a, AUTOSAR-A5_2_3-a, AUTOSAR-A7_1_1-a, AUTOSAR-M0_3_1-f, AUTOSAR-M4_5_3-a, AUTOSAR-M5_0_21-a, AUTOSAR-M5_2_8-a

フロー解析

BD-CO-ITINVCOMP, BD-CO-ITMOD, BD-PB-NP, BD-PB-STREAMINOUT, BD-PB-VARARGS, BD-PB-VCTOR, BD-PB-VDTOR, BD-RES-FREE, BD-RES-LEAKS, BD-TRS-DLOCK, BD-TRS-DSTRLOCK

SEI CERT C

CERT_C-CON30-a, CERT_C-CON31-a, CERT_C-CON31-b, CERT_C-CON35-a, CERT_C-DCL00-a, CERT_C-ERR33-c, CERT_C-EXP05-a, CERT_C-EXP32-a, CERT_C-EXP34-a, CERT_C-EXP40-a, CERT_C-FIO22-a, CERT_C-FIO39-a, CERT_C-FIO42-a, CERT_C-FIO46-a, CERT_C-INT13-a, CERT_C-INT16-a, CERT_C-INT36-a, CERT_C-MEM00-d, CERT_C-MEM00-e, CERT_C-MEM01-a, CERT_C-MEM12-a, CERT_C-MEM30-a, CERT_C-MEM31-a, CERT_C-MSC19-b, CERT_C-MSC39-a, CERT_C-POS48-a, CERT_C-POS54-c, CERT_C-STR05-a, CERT_C-STR09-a, CERT_C-STR10-a, CERT_C-STR30-a, CERT_C-WIN30-a

SEI CERT C++

CERT_CPP-CON50-a, CERT_CPP-CON56-a, CERT_CPP-CTR51-a, CERT_CPP-CTR53-b, CERT_CPP-CTR54-a, CERT_CPP-DCL51-e, CERT_CPP-DCL51-f, CERT_CPP-DCL57-a, CERT_CPP-ERR50-a, CERT_CPP-ERR50-b, CERT_CPP-ERR56-a, CERT_CPP-ERR57-a, CERT_CPP-EXP54-a, CERT_CPP-EXP55-a, CERT_CPP-EXP58-a, CERT_CPP-FIO50-a, CERT_CPP-FIO51-a, CERT_CPP-MEM50-a, CERT_CPP-OOP50-c, CERT_CPP-OOP50-d, CERT_CPP-STR51-a

Coding Conventions

CODSTA-16, CODSTA-30, CODSTA-63, CODSTA-65, CODSTA-69

Coding Conventions for C++

CODSTA-CPP-11, CODSTA-CPP-53, CODSTA-CPP-66

Exceptions

EXCEPT-01

High Integrity C++

HICPP-12_4_1-b, HICPP-12_4_1-c, HICPP-18_3_1-a, HICPP-5_2_1-c, HICPP-5_4_1-a, HICPP-5_4_1-c, HICPP-5_6_1-a, HICPP-7_1_2-a, HICPP-8_4_1-b

Joint Strike Fighter

JSF-151.1, JSF-185

MISRA C 2004

MISRA2004-11_5, MISRA2004-20_2_a, MISRA2004-20_2_b

MISRA C++ 2008

MISRA2008-0_3_1_b, MISRA2008-15_5_3, MISRA2008-15_5_3_b, MISRA2008-2_13_5, MISRA2008-4_5_3, MISRA2008-5_0_21, MISRA2008-5_2_4, MISRA2008-5_2_5, MISRA2008-5_2_8, MISRA2008-7_1_1

MISRA C 2012 (Legacy)

MISRA2012-DIR-4_13_a, MISRA2012-DIR-4_13_b, MISRA2012-DIR-4_13_e, MISRA2012-DIR-4_1_b, MISRA2012-RULE-11_8, MISRA2012-RULE-1_3_c, MISRA2012-RULE-21_2_b, MISRA2012-RULE-21_2_c, MISRA2012-RULE-22_1, MISRA2012-RULE-22_2_a, MISRA2012-RULE-22_6, MISRA2012-RULE-7_4

MISRA C 2012

MISRAC2012-DIR_4_1-b, MISRAC2012-DIR_4_13-a, MISRAC2012-DIR_4_13-b, MISRAC2012-DIR_4_13-e, MISRAC2012-RULE_11_8-a, MISRAC2012-RULE_1_3-c, MISRAC2012-RULE_21_2-b, MISRAC2012-RULE_21_2-c, MISRAC2012-RULE_22_1-a, MISRAC2012-RULE_22_2-a, MISRAC2012-RULE_22_6-a, MISRAC2012-RULE_7_4-a

Memory and Resource Management

MRM-40

Possible Bugs

PB-27, PB-38, PB-44

以下のルールの出力メッセージが更新されました。そのため、以前に DTP で関連付けられたこれらのルールの抑制はもう利用できない場合があります。

  • BD-PB-ARRAY
  • BD-PB-CHECKRET
  • BD-PB-OVERFARRAY
  • BD-PB-PTRARR
  • BD-PB-ZERO
  • BD-TRS-MLOCK
  • NAMING-HN-* 

BD カテゴリ ルールの以前のメッセージおよび抑制を復元できます。「C/C++test を新しいバージョンにアップグレードした後、一部のルールの抑制が DTP で使用できない場合」を参照してください。

  • No labels