This diagnostic rule is based on the MISRA (Motor Industry Software Reliability Association) software development guidelines.
This diagnostic rule is relevant only for C.
Applying a pointer to an incomplete atomic type (_Atomic void *
) can lead to unexpected results and should be avoided.
In C, the void *
type can be converted to any T *
type (C11, 6.3.2.3.1). However, the standard does not impose any size and alignment requirements on the _Atomic void *
pointer (C11, 6.2.5.28). As a result, converting between a pointer to (_Atomic void *
) and a pointer to any arbitrary atomic type (_Atomic T *
) may lead to undefined behavior.
The code example where the analyzer issues warnings:
int _Atomic a; void main (void) { a = 5; void _Atomic * avp1 = &a; _Atomic(void)* avp2 = &a; }
This diagnostic is classified as:
|