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 2022.3
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 Pre-2020.1
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 Pre-2020.1
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)