This diagnostic rule is based on the MISRA (Motor Industry Software Reliability Association) software development guide.
This rule only applies to programs written in C. A cast between a variable or an arithmetic type literal and 'void *' may cause undefined (for floating-point numbers) or platform-specific behavior (for integer types).
Consider the first synthetic example:
void* foo(void)
{
double pi = 3.14;
return pi;
}
In this case, the double 'pi' variable is implicitly cast to 'void *'. Such code will lead to undefined behavior.
Take a look at the second synthetic example:
void bar(void)
{
int a = 5;
void* b = (void*)a;
}
Here the 'int' variable is explicitly cast to the 'void *' pointer. Further dereferencing of such a pointer may lead to segfault.
This diagnostic is classified as:
|