C and C++


LANG.TYPE.BFINT : Inappropriate Bit-field Type

Summary

A bit-field type is not underlyingly int, signed int, unsigned int, or (C99 only) _Bool.

Properties

Class Name Inappropriate Bit-field Type
Significance style
Mnemonic LANG.TYPE.BFINT
Categories
MisraC2023 MisraC2023:6.1 Bit-fields shall only be declared with an appropriate type
Misra2012 Misra2012:6.1 Bit-fields shall only be declared with an appropriate type
Misra2004 Misra2004:6.4 Bit fields shall only be defined to be of type unsigned int or signed int
MisraC++2008 MisraC++2008:9-6-2 Bit-fields shall be either bool type or an explicitly unsigned or signed integral type.
  MisraC++2008:9-6-3 Bit-fields shall not have enum type.
MisraC++2023 MisraC++2023:12.2.2 A bit-field shall have an appropriate type
JSF++ JSF++:154 Bit-fields shall have explicitly unsigned integral or enumeration types only.
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="Inappropriate Bit-field Type"
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

typedef int plainint;
typedef short int shortint;

struct mystruct{
    char C             : 2;   /* 'Inappropriate Bit-field Type' warning issued here */
    plainint D         : 2;                       /* underlyingly int */
    shortint E         : 2;   /* 'Inappropriate Bit-field Type' warning issued here */
    long F             : 2;   /* 'Inappropriate Bit-field Type' warning issued here */ 
    _Bool G            : 1;                       /* _Bool permitted in C99 */
};

Relevant Configuration File Parameters

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