V2642. MISRA. The '_Atomic' specifier should not be applied to the incomplete type 'void'.
Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для языка C.
Использование указателя на атомарный неполный тип (_Atomic void *
) может привести к неожиданным результатам, и потому должно избегаться.
В языке C тип void *
можно преобразовать к любому типу T *
(C11, п. 6.3.2.3.1), однако стандарт не налагает никаких требований к размеру и выравниванию на указатель _Atomic void *
(C11, п. 6.2.5.28). Вследствие этого, преобразование между указателем на атомарный неполный тип (_Atomic void *
) и указателем на произвольный атомарный тип (_Atomic T *
) может привести к неопределённому поведению.
Пример кода, на котором анализатор сгенерирует предупреждения:
int _Atomic a;
void main (void)
{
a = 5;
void _Atomic * avp1 = &a;
_Atomic(void)* avp2 = &a;
}
Данная диагностика классифицируется как:
|