This diagnostic rule is based on the MISRA (Motor Industry Software Reliability Association) software development guidelines.
This diagnostic rule is relevant only for C.
A bit field should not be declared as a data member of a union. The way bit fields are stored in user-defined types is implementation-defined. If two bit fields with the same type are declared one after another, the compiler is not obligated to optimize their location in a single memory block. As a result, it is not clear which bits of a previously stored value the bit field will access.
The code example for which the analyzer issues warnings:
union U1 { int a : 8; // <= int b; }; union U2 { int a : 8; // <= int b : 24; // <= };
The rule does not apply to subobjects within a union that are not themselves unions.
union U3 { struct { int a:4; int b:4; } c; int d; };
This diagnostic is classified as:
|