C and C++


LANG.TYPE.BFUNION : Bit-field in Union

Summary

A member of a union is declared as a bit-field.

A member of a union that contains a bit-field member, but is not itself a union, will not trigger a warning of this class.

This class is a strict subset of Union Type.

Properties

Class Name Bit-field in Union
Significance reliability
Mnemonic LANG.TYPE.BFUNION
Categories
MisraC2023 MisraC2023:6.3 A bit field shall not be declared as a member of a union
  MisraC2023:19.2 The union keyword should not be used
Misra2012 Misra2012:6.3 A bit field shall not be declared as a member of a union
  Misra2012:19.2 The union keyword should not be used
Misra2004 Misra2004:3.5 The implementation defined behaviour and packing of bitfields shall be documented if being relied upon
  Misra2004:18.4 Unions shall not be used
AUTOSARC++14 AUTOSARC++14:A9-5-1 Unions shall not be used.
MisraC++2008 MisraC++2008:9-5-1 Unions shall not be used.
MisraC++2023 MisraC++2023:12.2.1 Bit fields should not be declared
JSF++ JSF++:153 Unions shall not be used.
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="Bit-field in Union"
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

union u1 {                /* 'Bit-Field in Union' warning issued here
                           * (also 'Union Type', when enabled)
                           */
    unsigned int bf:1;
    float f;
};

/* ok: not a union */
struct s1 {
    unsigned int bf:1;
    float f;
};

/* ok:
 * - union u2 has no bit-field members
 * - bit-field u1.s.bf is a member of a struct (not a union)
 */
union u2 {                /* ('Union Type' warning issued when enabled) */
    struct {
        unsigned int bf:1;
        int i;
    } s;
    float f;
};

struct s2 {
    union {               /* 'Bit-Field in Union' warning issued here
                           * (also 'Union Type', when enabled)
                           */
        unsigned int bf:1;
        int i;
    } u;
    float f;
};

Relevant Configuration File Parameters

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