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:
|