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.