C and C++


LANG.STRUCT.ICVMF : Inappropriate Comparison of Virtual Member Function

要旨

A pointer to a virtual member function is tested for equality with something other than nullptr.

The result of such a comparison is unspecified.

プロパティ

クラス名 Inappropriate Comparison of Virtual Member Function
日本語クラス名 Inappropriate Comparison of Virtual Member Function
クラス分類 信頼性 (reliability)
ニーモニック LANG.STRUCT.ICVMF
カテゴリー
AUTOSARC++14 AUTOSARC++14:A5-10-1 A pointer to member virtual function shall only be tested for equality with null-pointer-constant.
MisraC++2023 MisraC++2023:13.3.4 A comparison of a potentially virtual pointer to member shall only be with nullptr
CWE CWE:758 Reliance on Undefined, Unspecified, or Implementation-Defined Behavior
JSF++ JSF++:97.1 Neither operand of an equality operator (== or !=) shall be a pointer to a virtual member function.
対応言語 C++ のみ利用可能です。 C は利用できません。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Inappropriate Comparison of Virtual Member Function"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

class A {
  public:
    void f1(void);
    void f2(void);
    virtual void f3(void);
};

extern bool b1, b2;

void inappropriate_comparison(void) {
    b1 = &A::f2 == &A::f3; // 'Inappropriate Comparison of Virtual Member Function' warning issued here
}

void ok_comparisons(void) {
    b1 = &A::f1 != &A::f2;           // ok: both are non-virtual
    b2 = &A::f3 == nullptr;          // ok: comparison with nullptr
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。