MISRA C:2004 checker reference - certified
These checkers detect violations of the MISRA C:2004 standard.
Notes
- To view this information organized by rule number, see MISRA C:2004 rules mapped to Klocwork certified checkers.
- We provide full help for each MISRA C and MISRA C++ checker. Because this information is licensed, it is available as a part of your Klocwork installation, rather than online.
Checker name | Description | Rule | Version |
---|---|---|---|
FUNCRET.GEN | Non-void function does not return value | 16.8 | Pre-2020.1 |
FUNCRET.IMPLICIT | Non-void function implicitly returning int does not return value | 16.8 | Pre-2020.1 |
INVARIANT_CONDITION.GEN | Invariant expression in a condition | 13.7 | 2020.1 |
INVARIANT_CONDITION.UNREACH | Invariant expression in a condition | 13.7 | Pre-2020.1 |
LOCRET.ARG | Function returns address of local variable | 17.6 | Pre-2020.1 |
LOCRET.GLOB | Function returns address of local variable | 17.6 | Pre-2020.1 |
LOCRET.RET | Function returns address of local variable | 17.6 | Pre-2020.1 |
MISRA.ASM.ENCAPS | Assembly language is not isolated. | 2.1 | Pre-2020.1 |
MISRA.ASSIGN.COND | Assignment operator is used in a condition | 13.1 | Pre-2020.1 |
MISRA.ASSIGN.OVERLAP | Object is assigned to an overlapping object | 18.2 | 2023.2 |
MISRA.BITFIELD.SIGNED | Length of a named signed bit-field is less than 2 | 6.5 | Pre-2020.1 |
MISRA.BITFIELD.SIGNED.UNNAMED | Length of an unnamed signed bit-field is less than 2 | 6.5 | Pre-2020.1 |
MISRA.BITFIELD.TYPE | Type of bit-field is not signed/unsigned integer | 6.4 | Pre-2020.1 |
MISRA.BITS.NOT_UNSIGNED | Operand of bitwise operation is not unsigned integer | 12.7 | Pre-2020.1 |
MISRA.BITS.NOT_UNSIGNED.PREP | Operand of bitwise operation is not unsigned integer | 12.7 | Pre-2020.1 |
MISRA.BUILTIN_NUMERIC | Builtin numeric type is used | 6.3 | Pre-2020.1 |
MISRA.CAST.CONST | Cast operation removes const or volatile modifier from a pointer or reference | 11.5 | Pre-2020.1 |
MISRA.CAST.FLOAT | Non-trivial float expression is cast to a wider type | 10.4 | Pre-2020.1 |
MISRA.CAST.FUNC_PTR | Cast between a function pointer and a non-integral type | 11.1 | Pre-2020.1 |
MISRA.CAST.INT | Non-trivial integer expression is cast to a wider type, or type with a different signedness | 10.3 | Pre-2020.1 |
MISRA.CAST.PTR | Cast between a pointer to object type and a different pointer to object type | 11.4 | Pre-2020.1 |
MISRA.CAST.PTR.UNRELATED | Object of pointer type cast to unrelated type | 11.2 | 2023.2 |
MISRA.CAST.PTR_TO_INT | Cast between a pointer and an integral type | 11.3 | Pre-2020.1 |
MISRA.CAST.UNSIGNED_BITS | The result of bitwise operation on unsigned char or short is not cast back to original type | 10.5 | Pre-2020.1 |
MISRA.CHAR.NOT_CHARACTER | 'char' is used for non-character value | 6.1 | Pre-2020.1 |
MISRA.CHAR.TRIGRAPH | Trigraph usage | 4.2 | Pre-2020.1 |
MISRA.COMMA | Comma operator is used | 12.10 | Pre-2020.1 |
MISRA.COMP.WRAPAROUND | Wrap-around in a condition | 12.11 | 2020.3 |
MISRA.CONTINUE | Continue statement is used | 14.5 | Pre-2020.1 |
MISRA.CT.UNIQUE.ID | Identifier clashes with tag name | 5.4 | 2021.2 |
MISRA.CVALUE.IMPL.CAST | The value of an expression implicitly converted to a different type | 10.1 10.2 | 2020.3 |
MISRA.DECL.ARRAY_SIZE | Declaration of array with unknown size | 8.12 | Pre-2020.1 |
MISRA.DECL.FUNC_LOCAL | Function is declared locally | 8.6 | Pre-2020.1 |
MISRA.DECL.NO_TYPE | Declaration without a type | 8.2 | Pre-2020.1 |
MISRA.DEFINE.BADEXP | Inappropriate macro expansion | 19.4 | 2020.4 |
MISRA.DEFINE.FUNC | Function-like macro definition | 19.7 | Pre-2020.1 |
MISRA.DEFINE.LONGNAME | Macro name is too long | 5.1 | Pre-2020.1 |
MISRA.DEFINE.NOPARS | Macro parameter with no parentheses | 19.10 | 2020.4 |
MISRA.DEFINE.NOTGLOBAL | Define not at the global level | 19.5 | Pre-2020.1 |
MISRA.DEFINE.SHARP | # or ## operator in a macro definition | 19.13 | Pre-2020.1 |
MISRA.DEFINE.SHARP.MANY | Several # or ## operators in a macro definition | 19.12 | Pre-2020.1 |
MISRA.DEFINE.WRONGNAME | Usage of a name from the standard library for naming a macro | 20.1 | Pre-2020.1 |
MISRA.DEFINE.WRONGNAME.UNDERSCORE | Usage of a reserved name for naming a macro | 20.1 | Pre-2020.1 |
MISRA.ELIF.DEFINED | Incorrect 'defined' usage in #elif directive | 19.14 | Pre-2020.1 |
MISRA.ELIF.OTHERFILE | #elif in an improper file | 19.17 | Pre-2020.1 |
MISRA.ELIF.UNDEF | Undefined macros in #elif directive | 19.11 | Pre-2020.1 |
MISRA.ELIF.WRAPAROUND | Wrap-around in #elif directive | 12.11 | Pre-2020.1 |
MISRA.ELSE.OTHERFILE | #else in an improper file | 19.17 | Pre-2020.1 |
MISRA.ENDIF.OTHERFILE | #endif in an improper file | 19.17 | Pre-2020.1 |
MISRA.ENUM.INIT | Non-first enumerator is explicitly initialized, but not all elements are explicitly initialized. | 9.3 | Pre-2020.1 |
MISRA.EXPANSION.DIRECTIVE | Directive-like tokens within a macro argument | 19.9 | Pre-2020.1 |
MISRA.EXPANSION.NARGS | Missing macro argument | 19.8 | Pre-2020.1 |
MISRA.EXPANSION.UNSAFE | Unsafe macro usage | 20.1 20.5 20.6 20.7 20.8 | Pre-2020.1 |
MISRA.EXPR.PARENS.INSUFFICIENT | Limited dependence required for operator precedence rules in expressions | 12.1 | Pre-2020.1 |
MISRA.EXPR.PARENS.REDUNDANT | Limited dependence required for operator precedence rules in expressions | 12.1 | 2021.1 |
MISRA.FLOAT.BIT.REPR | Use of bit manipulations of floating-point values which rely on storage layout | 12.12 | Pre-2020.1 |
MISRA.FLOAT_EQUAL | Floating point expression is tested for equality | 13.3 | 2020.2 |
MISRA.FOR.COND | For loop condition does not depend on loop counter | 13.5 | Pre-2020.1 |
MISRA.FOR.COND.FLT | Floating point object is used in the condition section of a 'for' loop | 13.4 | Pre-2020.1 |
MISRA.FOR.INCR.CHANGE | For loop increment expression does not change loop counter | 13.5 | Pre-2020.1 |
MISRA.FOR.STMT.CHANGE | For loop counter is modified within the loop statement | 13.6 | Pre-2020.1 |
MISRA.FUNC.ADDR | Address of a function is used without & operator | 16.9 | Pre-2020.1 |
MISRA.FUNC.NOPROT.CALL | Function is called but has no prototype | 8.1 | 2021.1 |
MISRA.FUNC.NOPROT.DEF | Function has a definition but no prototype | 8.1 | Pre-2020.1 |
MISRA.FUNC.NO_PARAMS | Function without parameters is missing void parameter type | 16.5 | Pre-2020.1 |
MISRA.FUNC.PARAMS.IDENT | Identifiers used in declaration and definition of function are not identical | 16.4 | Pre-2020.1 |
MISRA.FUNC.RECUR | Recursive function | 16.2 | Pre-2020.1 |
MISRA.FUNC.STATIC.REDECL | Function or object redeclaration does not include 'static' modifier | 8.11 | Pre-2020.1 |
MISRA.FUNC.UNMATCHED.PARAMS | Number of formal and actual parameters passed to function do not match | 16.6 | Pre-2020.1 |
MISRA.FUNC.UNNAMED.PARAMS | Function declaration has unnamed parameters | 16.3 | 2022.4 |
MISRA.FUNC.VARARG | Function with variable number of arguments | 16.1 | Pre-2020.1 |
MISRA.GOTO | Goto statement is used | 14.4 | Pre-2020.1 |
MISRA.IDENT.LONG | Identifier is longer than 31 characters | 5.1 | Pre-2020.1 |
MISRA.IF.DEFINED | Incorrect 'defined' usage in #if directive | 19.14 | Pre-2020.1 |
MISRA.IF.NO_COMPOUND | The body of if/else statement is not a compound statement | 14.9 | Pre-2020.1 |
MISRA.IF.NO_ELSE | A chain of if/else-if statements is not terminated with else or is terminated with an empty else clause | 14.10 | Pre-2020.1 |
MISRA.IF.UNDEF | Undefined macros in #if directive | 19.11 | Pre-2020.1 |
MISRA.IF.WRAPAROUND | Wrap-around in #if directive | 12.11 | Pre-2020.1 |
MISRA.INCGUARD | Include guard is not provided | 19.15 | Pre-2020.1 |
MISRA.INCL.BAD | Non-standard include directive | 19.3 | 2020.4 |
MISRA.INCL.INSIDE | Include directive preceded by a preprocessor output token | 19.1 | Pre-2020.1 |
MISRA.INCL.SYMS | Non-standard characters in header file names | 19.2 | Pre-2020.1 |
MISRA.INCL.UNSAFE | Unsafe header inclusion | 20.1 20.12 20.8 20.9 | 2022.2 |
MISRA.INCOMPLETE.STRUCT | Incomplete struct type is used | 18.1 | Pre-2020.1 |
MISRA.INCOMPLETE.STRUCT.UNNAMED | Incomplete unnamed struct type is used | 18.1 | Pre-2020.1 |
MISRA.INCOMPLETE.UNION | Incomplete union type is used | 18.1 | Pre-2020.1 |
MISRA.INCOMPLETE.UNION.UNNAMED | Incomplete unnamed union type is used | 18.1 | Pre-2020.1 |
MISRA.INCR_DECR.OTHER | Increment or decrement operator is mixed with other operators in expression | 12.13 | Pre-2020.1 |
MISRA.INIT.BRACES | Incorrect initializer braces placement. | 9.2 | 2023.2 |
MISRA.ITER.ONETERM | Iteration statement has more than one break or goto for loop termination. | 14.6 | Pre-2020.1 |
MISRA.LITERAL.UNSIGNED.SUFFIX | Unsigned integer literal without 'U' suffix | 10.6 | Pre-2020.1 |
MISRA.LOGIC.OPERAND.NOT_BOOL | Operand of logical operator is not effectively boolean | 12.6 | Pre-2020.1 |
MISRA.LOGIC.OPERATOR.NOT_BOOL | Operand of non-logical operator is effectively boolean | 12.6 | 2021.2 |
MISRA.LOGIC.PRIMARY | Operand in a logical 'and' or 'or' expression is not a primary expression | 12.5 | Pre-2020.1 |
MISRA.LOGIC.SIDEEFF | Right operand in a logical 'and' or 'or' expression contains side effects | 12.4 | Pre-2020.1 |
MISRA.LOGIC.SIDEEFF.COND | Branch expression in a conditional expression contains side effects | 12.4 | Pre-2020.1 |
MISRA.NULL.STMT | Null statement is not the only statement on line or comments are placed incorrectly | 14.3 | Pre-2020.1 |
MISRA.OBJ.TYPE.COMPAT | Type not compatible with type of other declaration | 8.4 | Pre-2020.1 |
MISRA.OBJ.TYPE.IDENT | Type not identical with type of other declaration | 8.3 | Pre-2020.1 |
MISRA.ONEDEFRULE.FUNC | Global function definition in a header file | 8.5 | Pre-2020.1 |
MISRA.ONEDEFRULE.VAR | Global variable definition in a header file | 8.5 | 2020.2 |
MISRA.PPARAM.NEEDS.CONST | Pointer parameter is not used to modify the addressed object but is not declared as a pointer to const | 16.7 | Pre-2020.1 |
MISRA.PRAGMA | Non-documented pragma directive | 3.4 | Pre-2020.1 |
MISRA.PTR.ARITH | Pointer is used in arithmetic or array index expression | 17.1 17.4 | 2020.2 |
MISRA.PTR.CMP.2008 | Pointer comparison using comparison operators shall only be applied if pointing to same array and within the range | 17.3 | 2022.1 |
MISRA.PTR.CMP.OBJECT.2008 | Pointer comparison using comparison operators shall only be applied if pointing to same object and within the range | 17.3 | 2022.1 |
MISRA.PTR.SUB | Pointer subtraction shall only be applied if pointing to same array | 17.2 | 2022.4 |
MISRA.PTR.SUB.OBJECT | Pointer subtraction shall only be applied if pointing to same object | 17.2 | 2022.4 |
MISRA.PTR.TO_PTR_TO_PTR | Pointer declaration has more than two levels of indirection | 17.5 | Pre-2020.1 |
MISRA.RETURN.NOT_LAST | Return is not the last statement in a function | 14.7 | Pre-2020.1 |
MISRA.SHIFT.RANGE | Right operand of shift operation is out of range - greater or equal to max bit-length of left operand, or negative | 12.8 | Pre-2020.1 |
MISRA.SIGNED_CHAR.NOT_NUMERIC | 'signed char' or 'unsigned char' is used for non-numeric value | 6.2 | Pre-2020.1 |
MISRA.SIZEOF.SIDE_EFFECT | Operand of sizeof has side effects | 12.3 | Pre-2020.1 |
MISRA.STDLIB.ABORT | Use of 'abort', 'exit', 'getenv' or 'system' from library stdlib.h | 20.11 | Pre-2020.1 |
MISRA.STDLIB.ATOI | Use of 'atof', 'atoi' or 'atol' from library stdlib.h | 20.10 | Pre-2020.1 |
MISRA.STDLIB.ERRNO | Use of error indicator 'errno' | 20.5 | Pre-2020.1 |
MISRA.STDLIB.LONGJMP | Use of setjmp macro or longjmp function | 20.7 | Pre-2020.1 |
MISRA.STDLIB.MEMORY | Use of dynamic heap memory allocation | 20.4 | Pre-2020.1 |
MISRA.STDLIB.SIGNAL | Use of the signal handling facilities of signal.h | 20.8 | Pre-2020.1 |
MISRA.STDLIB.STDIO | Use of input/output library stdio.h in production code | 20.9 | Pre-2020.1 |
MISRA.STDLIB.TIME | Use of the time handling functions of library time.h | 20.12 | Pre-2020.1 |
MISRA.STDLIB.WRONGNAME | Reused name of standard library macro, object or function | 20.2 | Pre-2020.1 |
MISRA.STDLIB.WRONGNAME.UNDERSCORE | Usage of a reserved name for naming a language entity | 20.2 | Pre-2020.1 |
MISRA.STMT.NO_COMPOUND | The body of switch, while, do/while or for statement is not a compound statement | 14.8 | Pre-2020.1 |
MISRA.STMT.NO_EFFECT | The statement has no side effects, and does not change control flow | 14.2 | Pre-2020.1 |
MISRA.SWITCH.BOOL | Condition of switch statement is boolean expression | 15.4 | Pre-2020.1 |
MISRA.SWITCH.LABEL | A switch label belongs to nested compound statement inside switch body | 15.1 | Pre-2020.1 |
MISRA.SWITCH.NODEFAULT | No default clause at the end of a switch statement | 15.3 | Pre-2020.1 |
MISRA.SWITCH.NO_BREAK | No break or throw statement at the end of switch-clause | 15.2 | Pre-2020.1 |
MISRA.SWITCH.NO_CASE | No case-clause in a switch statement | 15.5 | Pre-2020.1 |
MISRA.TOKEN.BADCOM | Inappropriate character sequence in a comment | 2.3 | Pre-2020.1 |
MISRA.TOKEN.CPCOM | C++ style comments | 2.2 | Pre-2020.1 |
MISRA.TOKEN.OCTAL.ESCAPE | Usage of octal escape sequences | 7.1 | Pre-2020.1 |
MISRA.TOKEN.OCTAL.INT | Usage of octal integer constants | 7.1 | 2020.4 |
MISRA.TOKEN.WRONGESC | Incorrect escape sequence in a literal | 4.1 | Pre-2020.1 |
MISRA.TYPE.NAMECLASH.C.2004 | Identifier in one name space has same spelling as identifier in other name space | 5.6 | 2020.2 |
MISRA.TYPEDEF.NOT_UNIQUE | Typedef name is used for another entity | 5.3 | Pre-2020.1 |
MISRA.UMINUS.UNSIGNED | Operand of unary minus is unsigned | 12.9 | 2021.2 |
MISRA.UNDEF | Undef usage | 19.6 | Pre-2020.1 |
MISRA.UNDEF.NOTGLOBAL | Undef not at the global level | 19.5 | Pre-2020.1 |
MISRA.UNDEF.WRONGNAME | Undefinition of a name from the standard library | 20.2 | Pre-2020.1 |
MISRA.UNDEF.WRONGNAME.UNDERSCORE | Undefinition of a reserved name | 20.2 | Pre-2020.1 |
MISRA.UNION | Union is used | 18.4 | Pre-2020.1 |
MISRA.VAR.HIDDEN | Identifier declared in an inner scope hides identifier in outer scope | 5.2 | 2020.2 |
MISRA.VAR.MIN.VIS | Name visibility is too wide | 8.7 | 2020.1 |
MISRA.VAR.UNIQUE | Identifier clashes with other identifier | 5.7 | Pre-2020.1 |
MISRA.VAR.UNIQUE.STATIC | Identifier with static storage specifier clashes with other identifier | 5.5 | Pre-2020.1 |
MISRA.ZERO_EQ.IMPLICIT | Non-boolean expression is implicitly tested against zero | 13.2 | Pre-2020.1 |
NUM.OVERFLOW.DF | Possible numeric overflow or wraparound | 12.11 | 2022.3 |
PORTING.VAR.EFFECTS | Variable used twice in one expression where one usage is subject to side-effects | 12.2 | Pre-2020.1 |
SV.RVT.RETVAL_NOTTESTED | Ignored Return Value | 16.10 | 2021.2 |
UNINIT.HEAP.MIGHT | Uninitialized Heap Use - possible | 9.1 | Pre-2020.1 |
UNINIT.HEAP.MUST | Uninitialized Heap Use | 9.1 | Pre-2020.1 |
UNINIT.STACK.ARRAY.MIGHT | Uninitialized Array - possible | 9.1 | Pre-2020.1 |
UNINIT.STACK.ARRAY.MUST | Uninitialized Array | 9.1 | Pre-2020.1 |
UNINIT.STACK.ARRAY.PARTIAL.MUST | Partially Uninitialized Array | 9.1 | Pre-2020.1 |
UNINIT.STACK.MIGHT | Uninitialized Variable - possible | 9.1 | Pre-2020.1 |
UNINIT.STACK.MUST | Uninitialized Variable | 9.1 | Pre-2020.1 |
UNREACH.ENUM | Code is unreachable due to the possible value(s) of an enum | 14.1 | 2021.3 |
UNREACH.GEN | Unreachable code | 14.1 | Pre-2020.1 |
UNREACH.RETURN | Unreachable Void Return | 14.1 | Pre-2020.1 |
Support Summary
Number of rules not statically verifiable: 11 of 142
Number of statically verifiable rules supported: 124 of 131
MISRA C:2004 coverage = 95% (excludes rules that are not statically verifiable)