09-04-2018, 07:45 PM
When rule 21.15 of MISRA C 2012 Amendment 1 refers to the types that pointer arguments are pointers to, how are explicit casts interpreted? Are the types that they are pointers to considered before or after the cast?
Code:
void f(signed char* a, int* b, size_t n) {
memcmp(a, a, n); // ok - pointers to same type
memcmp(b, b, n); // ok - pointers to same type
memcmp((int*)b, (int*)b, n); // ok - same type and cast has no effect
memcmp((int*)a, (int*)a, n); // ok? - cast to different pointer type, arguments match before and after but with different matching types
memcmp(a, b, n); // violation - pointers to different types
memcmp((int*)a, b, n); // violation? - types only match due to pointer cast
memcmp((float*)a, (float*)b, n); // violation? - different pointer types cast to third common pointer type
memcmp((short*)a, a, n); // violation? - original pointer types match before cast
}