﻿# V2642\. MISRA\. The '\_Atomic' specifier should not be applied to the incomplete type 'void'\.

This diagnostic rule is based on the [MISRA](https://misra.org.uk/) \(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:

```cpp
int _Atomic a;

void main (void)
{
  a = 5;
  void _Atomic * avp1 = &a; 
  _Atomic(void)* avp2 = &a; 
}
```