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.TYPE.BCVNID : Virtual Base Class not In Diamond

Summary

A base class is declared virtual, but is not a common base class in a diamond hierarchy.

This class is a strict subset of Virtual Base Class.

Properties

Class Name Virtual Base Class not In Diamond
Significance style
Mnemonic LANG.TYPE.BCVNID
Categories
AUTOSARC++14 AUTOSARC++14:M10-1-1 Classes should not be derived from virtual bases.
  AUTOSARC++14:M10-1-2 A base class shall only be declared virtual if it is used in a diamond hierarchy.
MisraC++2008 MisraC++2008:10-1-1 Classes should not be derived from virtual bases.
  MisraC++2008:10-1-2 A base class shall only be declared virtual if it is used in a diamond hierarchy.
MisraC++2023 MisraC++2023:13.1.1 Classes should not be inherited virtually
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Virtual Base Class not In Diamond"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

//        BaseA                  BaseB               BaseC  BaseD
//         / \                    |                   / \   /    
//        /   \                   |                  /   \ /     
//     Int1   Int2               Int3             Int4   Int5    
//        \   /                   |                  \   /       
//         \ /                    |                   \ /        
//      DerivedX               DerivedY             DerivedZ     

class BaseA {};
class BaseB {};
class BaseC {};
class BaseD {};

class Int1: public virtual BaseA {};                                   // ok:  within a diamond hierarchy
class Int2: public virtual BaseA {};                                   // ok:  within a diamond hierarchy
class Int3: public virtual BaseB {};                       // 'Virtual Base Class not In Diamond' warning issued here
class Int4: public virtual BaseC {};                                   // ok: within a diamond hierarchy
class Int5: public virtual BaseC, public virtual BaseD {}; // 'Virtual Base Class not In Diamond' warning issued here

class DerivedX: public Int1, public Int2 {};
class DerivedY: public Int3 {};
class DerivedZ: public Int4, public Int5 {};

If Virtual Base Class checks are enabled, a Virtual Base Class warning will be issued for every intermediate class declaration (Int1, Int2, Int3, Int4, Int5) in the example.

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.

 

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