ホーム > ユーザーサポート > FAQ カバレッジマスターwinAMS

FAQ / カバレッジマスターwinAMS

MISRA-C解析に関する問題

D02_01: MISRA解析を行っていますが、シフト演算処理の前にシフト値のチェックを行っているにも係わらず、違反(チェックをしていない)が報告されます。なぜですか?

【質問】
MISRA解析を行っていますが、シフト演算処理の前にシフト値のチェックを行っているにも係わらず、違反(チェックをしていない)が報告されます。なぜですか?


【回答】
これは、シフト値を指定する変数が構造体メンバーの場合などに発生します。

 (例)if ( pStrPtr->shiftBit >= 0 && pStrPtr->shiftBit < 32 ) // シフト値チェック
    {
      data >> pStrPtr->shiftBit; // シフト操作
    }

上の例の場合、ポインタ参照にてシフト前の確認が行われていますが、CasePlayer2はエラーの可能性があるものとして扱い、MISRA−C 2004ではルール番号[12.8]、MISRA-C 1998ではルール番号[38]の違反を出力します。これはCasePlayer2の解析エンジンの機能制限の1つです。

この様な違反に対して、MISRA-C解析機能には、エラーとして出力するかどうかの解析判断に設定があります。

CasePlayer2の設定タブの、「MISRA-C解析」の中にある

 「プログラム動作上問題になる可能性があるものを指摘する」

をONにしていた場合、プログラム動作上問題になる可能性がある記述と解析にて判断が行われた場合には、エラーを出力します。このオプションは、現在のMISRA-C解析エンジンにより、明確にエラーと判断できないものの場合に、エラーとして扱うか否かを設定するものです。本件のエラーは、上記の設定オプションをOFFにして頂くと、エラーを表示しません

ただし、可能性としましては、問題を起こす可能性がある場合でもエラーを出さない結果となるため、デフォルトではこのオプションがONになっています。

 

運用方法としましては、上記の通りOFFで運用頂きエラーを排除するか、ONのままで運用頂き、出力されたエラーにつきましては、ユーザーにご判断頂く方法となります。

なお、マニュアルからの抜粋ですが、このオプションの説明を下に添付いたします。

--(CasePlayer2 ヘルプマニュアルより)--
プログラム動作上問題になる可能性があるものを指摘する

下記のルールに関して、プログラム動作上問題になる可能性がある記述についてメッセージを出すかどうかを指定できます。一つのルールでプログラム動作上問題になる可能性がある記述と明確に問題がある(または明確に違反がある)記述があるルールのみ、この指定で制御できます。

《MISRA-C:1998でこのオプションが適用されるルール》

ルール4
ルール30
ルール38
ルール114

《MISRA-C:2004でこのオプションが適用されるルール》

ルール9.1
ルール12.8
ルール17.1
ルール17.2
ルール17.3
ルール17.4
ルール20.1
ルール21.1

 

 

関連サポート情報検索

【サポート情報サイト内Google検索】

検索キーワード: MISRA-C | シフト演算

他のキーワード検索


参考情報・リンク