JavaScript is not currently enabled, but is required for full CodeSonar manual search and browse functionality.

If you are viewing this file in your hub's Web GUI, enable JavaScript in your browser: you will also need it for GUI functionality.

If you opened this file directly from disk, your browser may be directly suppressing JavaScript functionality: certain browsers perform this suppression on local files (but not files delivered by web servers) for security reasons.

CodeSonar® 9.2p0 CONFIDENTIAL CodeSecure Inc
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
}

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

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

 

To report problems with this documentation, please visit https://support.codesecure.com/.