MISRA C++:2023 rules mapped to Klocwork certified checkers

Rule Category Decidable? Checker name and description
0.0.1 Required Yes

UNREACH.ENUM   Code is unreachable due to the possible value(s) of an enum

UNREACH.GEN   Unreachable code

UNREACH.RETURN   Unreachable Void Return

UNREACH.SIZEOF   Architecture-related unreachable code

0.0.2 Advisory No

INVARIANT_CONDITION.GEN   Invariant expression in a condition

INVARIANT_CONDITION.UNREACH   Invariant expression in a condition

0.1.1 Advisory No

VA_UNUSED.GEN   Value is Never Used after Assignment

VA_UNUSED.INIT   Value is Never Used after Initialization

0.1.2 Required Yes

MISRA.FUNC.UNUSEDRET   Return value of a non-void function is not used

0.2.1 Advisory Yes

LV_UNUSED.GEN   Local variable unused

0.2.2 Required Yes

MISRA.FUNC.UNUSEDPAR   Formal parameter of a non-virtual function is not used

0.2.3 Required Yes

0.2.4 Advisory Yes

UNUSED.FUNC.GEN   Function defined but not used

4.1.1 Required No

4.1.2 Advisory Yes

MISRA.TOKEN.OCTAL.ESCAPE   Usage of octal escape sequences

MISRA.TOKEN.OCTAL.INT   Usage of octal integer constants

4.1.3 Required No

MISRA.ADDR.REF.PARAM   Function returns reference to parameter passed by reference

MISRA.ADDR.REF.PARAM.PTR   Function returns address of parameter passed by reference

MISRA.CONV.FLOAT   Implicit floating-point conversion

MISRA.DECL.EXCPT.SPEC   Function is declared with different exception specifications

MISRA.DEFINE.WRONGNAME   Usage of a name from the standard library for naming a macro

MISRA.DEFINE.WRONGNAME.UNDERSCORE   Usage of a reserved name for naming a macro

MISRA.INCL.UNSAFE   Unsafe header inclusion

MISRA.SPEC.SAMEFILE   Template specialization and its primary template are declared in different files

MISRA.STDLIB.CSTRING.MACRO   Macro from 'cstring' library is used

MISRA.TOKEN.WRONGESC   Incorrect escape sequence in a literal

4.6.1 Required No

5.0.1 Required Yes

MISRA.CHAR.TRIGRAPH   Trigraph usage

5.10.1 Required Yes

5.13.1 Required Yes

5.13.2 Required Yes

5.13.3 Required Yes

MISRA.TOKEN.OCTAL.INT   Usage of octal integer constants

5.13.4 Required Yes

MISRA.LITERAL.UNSIGNED.SUFFIX   Unsigned integer literal without 'U' suffix

5.13.5 Required Yes

5.13.6 Required Yes

5.13.7 Required Yes

MISRA.STRINGS.CONCAT   Narrow and wide string literals concatenated

5.7.1 Required Yes

MISRA.TOKEN.BADCOM   Inappropriate character sequence in a comment

5.7.3 Required Yes

6.0.1 Required Yes

MISRA.DECL.FUNC_LOCAL   Function is declared locally

6.0.2 Advisory Yes

MISRA.DECL.ARRAY_SIZE   Declaration of array with unknown size

6.0.3 Advisory Yes

MISRA.NS.GLOBAL   Function, variable or type declaration in global namespace

MISRA.NS.GLOBAL.USING   Using directive or declaration in global namespace

6.0.4 Required Yes

MISRA.NS.MAIN   Non-global function with name 'main' is defined

6.2.1 Required Yes

6.2.2 Required Yes

MISRA.OBJ.TYPE.COMPAT   Type not compatible with type of other declaration

6.2.3 Required Yes

6.2.4 Required Yes

MISRA.ONEDEFRULE.FUNC   Global function definition in a header file

MISRA.ONEDEFRULE.VAR   Global variable definition in a header file

6.4.1 Required Yes

MISRA.VAR.HIDDEN   Identifier declared in an inner scope hides identifier in outer scope

6.4.2 Required Yes

MISRA.BASE.IDS.UNIQUE   Member name is used twice in inheritance hierarchy

6.4.3 Required Yes

MISRA.TEMPLMEM.NOQUAL   In an instantiated template a member declared in a dependant base is used without a qualificator or 'this'

6.5.1 Advisory Yes

MISRA.LINKAGE.EXTERN   Object or function declaration with external linkage not in header file

6.5.2 Advisory Yes

6.7.1 Required Yes

6.7.2 Required Yes

6.8.1 Required No

LOCRET.RET   Function returns address of local variable

UFM.DEREF.MUST   Use of Freed Memory by Pointer

UFM.FFM.MIGHT   Use of free memory (double free) - possible

UFM.FFM.MUST   Freeing Freed Memory

UFM.RETURN.MIGHT   Use of freed memory (return) - possible

UFM.RETURN.MUST   Use of Freed Memory on Return

UFM.USE.MIGHT   Use of free memory - possible

UFM.USE.MUST   Use of Freed Memory

6.8.2 Mandatory Yes

LOCRET.RET   Function returns address of local variable

6.8.3 Required Yes

LOCRET.ARG   Function returns address of local variable

LOCRET.GLOB   Function returns address of local variable

6.8.4 Advisory Yes

6.9.1 Required Yes

MISRA.OBJ.TYPE.IDENT   Type not identical with type of other declaration

6.9.2 Advisory Yes

MISRA.BUILTIN_NUMERIC   Builtin numeric type is used

7.0.1 Required Yes

CXX.BITOP.BOOL_OPERAND   Potential logic error: Boolean expressions should not be used directly as bitwise operator arguments. Consider using logical operators instead.

MISRA.LOGIC.OPERATOR.NOT_BOOL   Operand of non-logical operator is effectively boolean

7.0.2 Required Yes

PORTING.CMPSPEC.TYPE.BOOL   Assignment to a 'bool' type is larger than 1 byte

7.0.3 Required Yes

MISRA.CHAR.NOT_CHARACTER   'char' is used for non-character value

7.0.4 Required Yes

MISRA.BITS.NOT_UNSIGNED   Operand of bitwise operation is not unsigned integer

MISRA.BITS.NOT_UNSIGNED.PREP   Operand of bitwise operation is not unsigned integer

MISRA.BITS.OPERAND   Operands of bitwise operation have different underlying types

MISRA.SHIFT.RANGE   Right operand of shift operation is out of range - greater or equal to max bit-length of left operand, or negative

7.0.5 Required Yes

MISRA.CAST.FLOAT_INT   Cast of floating point expression to integral type

MISRA.CAST.INT.SIGN   Non-trivial integral expression is cast to type with different signedness

MISRA.CAST.INT_FLOAT   Cast of integral expression to floating point type

MISRA.CONV.INT.SIGN   Implicit integral conversion changes signedness

7.0.6 Required Yes

MISRA.CHAR.OPERAND   Expression of type 'char' or 'wchar_t' is used as non-character operand

MISRA.ENUM.OPERAND   Expression of enum type is used in arithmetic context

7.11.1 Required Yes

MISRA.LITERAL.NULL.INT   NULL used as an integer value.

MISRA.LITERAL.NULL.PTR   Literal zero used as the null-pointer-constant.

7.11.2 Required Yes

MISRA.FUNC.ARRAY.PARAMS   Function argument with array type decay to a pointer

7.11.3 Required Yes

MISRA.CAST.FUNC_PTR.CPP   Cast converts function pointer to other pointer type

MISRA.CAST.INT_TO_PTR   Object with integer type or pointer to void cast to pointer type

MISRA.CAST.PTR.UNRELATED   Object of pointer type cast to unrelated type

8.0.1 Advisory Yes

MISRA.DEFINE.NOPARS   Macro parameter with no parentheses

MISRA.EXPR.PARENS.REDUNDANT   Limited dependence required for operator precedence rules in expressions

MISRA.LOGIC.POSTFIX   Operand in a logical 'and' or 'or' expression is not a postfix expression

8.1.1 Required Yes

8.1.2 Advisory Yes

AUTOSAR.LAMBDA.IMPLICIT_CAPTURE   Variables shall not be implicitly captured in a lambda expression

8.14.1 Advisory No

MISRA.LOGIC.SIDEEFF   Right operand in a logical 'and' or 'or' expression contains side effects

8.18.1 Mandatory No

MISRA.ASSIGN.OVERLAP   Object is assigned to an overlapping object

8.18.2 Advisory Yes

MISRA.ASSIGN.COND   Assignment operator is used in a condition

MISRA.ASSIGN.SUBEXPR   Assignment operator is used in a sub-expression outside a condition

8.19.1 Advisory Yes

MISRA.COMMA   Comma operator is used

8.2.1 Required Yes

MISRA.CAST.PTR.VRCLASS   A cast form pointer to a virtual base class to pointer to a derived class does not use 'dynamic_cast'

8.2.10 Required No

MISRA.FUNC.RECUR   Recursive function

8.20.1 Advisory Yes

MISRA.COMP.WRAPAROUND   Wrap-around in a condition

MISRA.ELIF.WRAPAROUND   Wrap-around in #elif directive

MISRA.IF.WRAPAROUND   Wrap-around in #if directive

NUM.OVERFLOW.DF   Possible numeric overflow or wraparound

8.2.11 Required Yes

8.2.2 Required Yes

MISRA.C_CAST   C-style cast to non-void type

MISRA.FUNC_CAST   Functional notation cast different from explicit constructor call

8.2.3 Required Yes

MISRA.CAST.CONST   Cast operation removes const or volatile modifier from a pointer or reference

8.2.4 Required Yes

MISRA.CAST.FUNC_PTR.CPP   Cast converts function pointer to other pointer type

8.2.5 Required Yes

AUTOSAR.CAST.REINTERPRET   reinterpret_cast shall not be used

8.2.6 Required Yes

MISRA.CAST.INT_TO_PTR   Object with integer type or pointer to void cast to pointer type

8.2.7 Advisory Yes

MISRA.CAST.PTR_TO_INT   Cast between a pointer and an integral type

8.2.8 Required Yes

8.2.9 Required Yes

8.3.1 Advisory Yes

MISRA.UMINUS.UNSIGNED   Operand of unary minus is unsigned

8.3.2 Advisory Yes

8.7.1 Required No

MISRA.PTR.ARITH   Pointer is used in arithmetic or array index expression

MISRA.PTR.ARITH.NOT_SAME.2008   A pointer resulting from arithmetic on a pointer operand shall address an element of the same array as that pointer operand

8.7.2 Required No

MISRA.PTR.SUB   Pointer subtraction shall only be applied if pointing to same array

MISRA.PTR.SUB.OBJECT   Pointer subtraction shall only be applied if pointing to same object

8.9.1 Required No

MISRA.PTR.CMP.2008   Pointer comparison using comparison operators shall only be applied if pointing to same array and within the range

MISRA.PTR.CMP.OBJECT.2008   Pointer comparison using comparison operators shall only be applied if pointing to same object and within the range

9.2.1 Required Yes

9.3.1 Required Yes

MISRA.IF.NO_COMPOUND   The body of if/else statement is not a compound statement

MISRA.STMT.NO_COMPOUND   The body of switch, while, do/while or for statement is not a compound statement

9.4.1 Required Yes

MISRA.IF.NO_ELSE   A chain of if/else-if statements is not terminated with else or is terminated with an empty else clause

9.4.2 Required Yes

MISRA.SWITCH.BOOL   Condition of switch statement is boolean expression

MISRA.SWITCH.LABEL   A switch label belongs to nested compound statement inside switch body

MISRA.SWITCH.NOT_WELL_FORMED   Switch statement is not well-formed

MISRA.SWITCH.NO_CASE   No case-clause in a switch statement

9.5.1 Advisory Yes

MISRA.FOR.COND.CHANGE   For loop counter is modified within the loop condition section

MISRA.FOR.COUNTER.FLT   For loop counter has a floating point type

MISRA.FOR.COUNTER.MANY   Many counters in a for loop

MISRA.FOR.INCR   For loop counter is modified in an inappropriate way

MISRA.FOR.STMT.CHANGE   For loop counter is modified within the loop statement

9.5.2 Required Yes

9.6.1 Advisory Yes

AUTOSAR.GOTO   The goto statement shall not be used

9.6.2 Required Yes

MISRA.GOTO.NESTED   Goto to a label declared in a nested compound statement

9.6.3 Required Yes

MISRA.GOTO.AFTER.LABEL   Unconstrained use of goto

9.6.4 Required No

9.6.5 Required Yes

FUNCRET.GEN   Non-void function does not return value

RETVOID.GEN   Non-void function returns void value

10.0.1 Advisory Yes

MISRA.DECL.MANY_DCLS   More than one declarator in one declaration

10.1.1 Advisory Yes

MISRA.CONST.RET.NON_CONST   Constant member function returns non-const pointer to member variable

MISRA.PPARAM.NEEDS.CONST   Pointer parameter is not used to modify the addressed object but is not declared as a pointer to const

MISRA.RET.REF.NON_CONST   Member function returns non-const handle to member variable

10.1.2 Required Yes

CERT.EXPR.VOLATILE.ADDR.PARAM   Do not pass a volatile object to a function through a nonvolatile pointer

10.2.1 Required Yes

10.2.2 Advisory Yes

10.2.3 Required Yes

10.3.1 Advisory Yes

MISRA.NAMESPACE.UNMD   Unnamed namespace in header file

10.4.1 Required Yes

AUTOSAR.ASM   The asm declaration shall not be used

11.3.1 Advisory Yes

AUTOSAR.ARRAY.CSTYLE   C-style arrays shall not be used

11.3.2 Advisory Yes

MISRA.PTR.TO_PTR_TO_PTR   Pointer declaration has more than two levels of indirection

11.6.1 Advisory Yes

11.6.2 Mandatory No

UNINIT.CTOR.MIGHT   Uninitialized Variable in Constructor - possible

UNINIT.CTOR.MUST   Uninitialized Variable in Constructor

UNINIT.HEAP.MIGHT   Uninitialized Heap Use - possible

UNINIT.HEAP.MUST   Uninitialized Heap Use

UNINIT.STACK.ARRAY.MIGHT   Uninitialized Array - possible

UNINIT.STACK.ARRAY.MUST   Uninitialized Array

UNINIT.STACK.ARRAY.PARTIAL.MUST   Partially Uninitialized Array

UNINIT.STACK.MIGHT   Uninitialized Variable - possible

UNINIT.STACK.MUST   Uninitialized Variable

11.6.3 Required Yes

MISRA.ENUM.IMPLICIT.VAL.NON_UNIQUE.2012   Implicit enumerator value is not unique

12.2.1 Advisory Yes

12.2.2 Required Yes

12.2.3 Required Yes

MISRA.BITFIELD.SIGNED   Length of a named signed bit-field is less than 2

12.3.1 Required Yes

MISRA.UNION   Union is used

13.1.1 Advisory Yes

MISRA.DERIVE.VIRTUAL   Class is derived from virtual base

13.1.2 Required Yes

MISRA.BASE.VIRTUAL.NOTVIRTUAL   Base class is used as both virtual and not virtual in inheritance hierarchy

13.3.1 Required Yes

AUTOSAR.MEMB.VIRTUAL.SPEC   Virtual function declaration shall contain exactly one of the three specifiers: (1) virtual, (2) override, (3) final.

13.3.2 Required Yes

13.3.3 Required Yes

MISRA.FUNC.PARAMS.IDENT   Identifiers used in declaration and definition of function are not identical

13.3.4 Required Yes

AUTOSAR.VIRTUAL.PTR_COMPARE   A pointer to member virtual function shall only be tested for equality with null-pointer-constant

14.1.1 Advisory Yes

15.0.1 Required Yes

15.0.2 Advisory Yes

15.1.1 Required No

MISRA.CTOR.DYNAMIC   Object's dynamic type is used from the body of its constructor

MISRA.DTOR.DYNAMIC   Object's dynamic type is used from the body of its destructor

15.1.2 Advisory Yes

MISRA.CTOR.BASE   Constructor does not explicitly call constructor of its base class

15.1.3 Required Yes

MISRA.CTOR.NOT_EXPLICIT   Constructor with one argument of built-in type is not declared 'explicit'

15.1.4 Advisory Yes

15.1.5 Required Yes

16.5.1 Required Yes

16.5.2 Required Yes

MISRA.UN_OP.OVERLOAD   Unary & operator is overloaded

16.6.1 Advisory Yes

17.8.1 Required Yes

MISRA.FUNC.SPEC.OVRLD   Viable function set for a function call contains an overloaded template and its explicit specialization

18.1.1 Required Yes

MISRA.THROW.PTR   Exception object is a pointer

18.1.2 Required Yes

MISRA.THROW.EMPTY   Empty throw expression does not belong to a catch block

18.3.1 Advisory Yes

MISRA.CATCH.ALL   No ellipsis exception handler in a try-catch block

18.3.2 Required Yes

MISRA.CATCH.BY_VALUE   Exception object of class type is caught by value

18.3.3 Required Yes

MISRA.CTOR.TRY.NON_STATIC   Function try/catch block of constructor or destructor references non-static members

18.4.1 Required Yes

18.5.1 Advisory No

AUTOSAR.EXCPT.NOEXCPT_THROW   If a function is declared to be noexcept, noexcept(true) or noexcept(<true condition>), then it shall not exit with an exception

18.5.2 Advisory Yes

MISRA.TERMINATE   terminate() function is called explicitly

19.0.1 Required Yes

MISRA.USE.UNKNOWNDIR   Unknown preprocessor directive is used

19.0.2 Required Yes

MISRA.DEFINE.FUNC   Function-like macro definition

19.0.3 Advisory Yes

MISRA.INCL.INSIDE   Include directive preceded by a preprocessor output token

19.0.4 Advisory Yes

19.1.1 Required Yes

MISRA.ELIF.DEFINED   Incorrect 'defined' usage in #elif directive

MISRA.IF.DEFINED   Incorrect 'defined' usage in #if directive

19.1.2 Required Yes

MISRA.ELIF.OTHERFILE   #elif in an improper file

MISRA.ELSE.OTHERFILE   #else in an improper file

MISRA.ENDIF.OTHERFILE   #endif in an improper file

19.1.3 Required Yes

MISRA.ELIF.UNDEF   Undefined macros in #elif directive

MISRA.IF.UNDEF   Undefined macros in #if directive

19.2.1 Required Yes

MISRA.INCGUARD   Include guard is not provided

19.2.2 Required Yes

MISRA.INCL.BAD   Non-standard include directive

19.2.3 Required Yes

MISRA.INCL.SYMS   Non-standard characters in header file names

19.3.1 Advisory Yes

MISRA.DEFINE.SHARP   # or ## operator in a macro definition

19.3.2 Required Yes

MISRA.DEFINE.SHARP.ORDER.2012   Unspecified order of evaluation of multiple '#' or '##'

19.3.3 Required Yes

MISRA.DEFINE.SHARP.REPLACE.2012   A macro parameter used as an operand to the '#' or '##' operators, which is itself subject to further macro replacement, shall only be used as an operand to these operators

19.3.4 Required Yes

MISRA.DEFINE.NOPARS   Macro parameter with no parentheses

19.3.5 Required Yes

MISRA.EXPANSION.DIRECTIVE   Directive-like tokens within a macro argument

19.6.1 Advisory Yes

MISRA.PRAGMA.ASM   Incorrect assembler instruction

PORTING.PRAGMA.ALIGN   #pragma align usage

PORTING.PRAGMA.PACK   #pragma pack usage

21.10.1 Required Yes

MISRA.FUNC.VARARG   Function with variable number of arguments

21.10.2 Required Yes

MISRA.STDLIB.LONGJMP   Use of setjmp macro or longjmp function

21.10.3 Required Yes

MISRA.STDLIB.SIGNAL   Use of the signal handling facilities of signal.h

21.2.1 Required Yes

MISRA.STDLIB.ATOI   Use of 'atof', 'atoi' or 'atol' from library stdlib.h

21.2.2 Required Yes

MISRA.STDLIB.CSTRING   Function from 'cstring' library is used

21.2.3 Required Yes

MISRA.STDLIB.SYSTEM.2012_AMD2   Use of 'system' from library stdlib.h

21.2.4 Required Yes

21.6.1 Advisory No

MISRA.STDLIB.MEMORY   Use of dynamic heap memory allocation

21.6.2 Required Yes

MISRA.STDLIB.MEMORY   Use of dynamic heap memory allocation

21.6.3 Required Yes

21.6.4 Required Yes

AUTOSAR.OP.DELETE.MISSING_VERSION   If a project has sized or unsized version of operator "delete" globally defined, then both sized and unsized versions shall be defined

21.6.5 Required Yes

CERT.EXPR.DELETE_PTR.INCOMPLETE_TYPE   Do not delete a pointer to an incomplete type

22.3.1 Required Yes

22.4.1 Required Yes

23.11.1 Advisory Yes

24.5.1 Required Yes

24.5.2 Required Yes

25.5.1 Required Yes

AUTOSAR.SETLOCALE   The library <clocale> (locale.h) and the setlocale function shall not be used

25.5.2 Mandatory Yes

CXX.STDLIB.ILLEGAL_WRITE   The pointers returned by the Standard Library functions localeconv, getenv, setlocale or, strerror shall only be used as if they have pointer to const-qualified type

25.5.3 Mandatory No

CXX.STDLIB.ILLEGAL_REUSE   The pointer returned by the Standard Library functions asctime and similar shall not be used following a subsequent call to the same function

26.3.1 Advisory Yes

AUTOSAR.VECTOR.BOOL   The std::vector<bool> specialization shall not be used

28.3.1 Required No

28.6.1 Required Yes

AUTOSAR.STDLIB.MOVE.CONST   The std::move shall not be used on objects declared const or const&

28.6.2 Required Yes

AUTOSAR.FORWARD   Forwarding values to other functions shall be done via: (1) std::move if the value is an rvalue reference, (2) std::forward if the value is forwarding reference

28.6.3 Required Yes

28.6.4 Required Yes

30.0.1 Required Yes

MISRA.STDLIB.STDIO   Use of input/output library stdio.h in production code

30.0.2 Required No

Dir. 0.3.1 Required

Dir. 0.3.2 Required

Dir. 5.7.2 Required

Dir. 15.8.1 Required

CL.SELF-ASSIGN   Use of free memory (double free) - in operator=

Support Summary

Total supported: 125

Total of not statically verifiable rules: 4

Total of statically verifiable rules not supported: 50

MISRA C++ coverage: 70% (excludes rules that are not statically verifiable)

"MISRA", "MISRA C" and "MISRA C++" are registered trademarks of The MISRA Consortium Limited. ​