C and C++


LANG.CAST.PC.OBJ : Cast: Object Pointers

Summary

A pointer to object is cast to a pointer to a different object type.

Exception: casting a pointer to object to pointer to char, signed char, or unsigned char will not trigger a warning of this class.

Properties

Class Name Cast: Object Pointers
Significance style
Mnemonic LANG.CAST.PC.OBJ
Categories
MisraC2023 MisraC2023:11.3 A conversion shall not be performed between a pointer to object type and a pointer to a different object type
Misra2012 Misra2012:11.3 A conversion shall not be performed between a pointer to object type and a pointer to a different object type
Misra2004 Misra2004:11.4 A cast should not be performed between a pointer to object type and a different pointer to object type
AUTOSARC++14 AUTOSARC++14:A5-2-4 reinterpret_cast shall not be used.
MisraC++2008 MisraC++2008:5-2-7 An object with pointer type shall not be converted to an unrelated pointer type, either directly or indirectly.
MisraC++2023 MisraC++2023:8.2.5 reinterpret_cast shall not be used
CWE CWE:704 Incorrect Type Conversion or Cast
TS17961 TS17961:5.1-ptrcomp 5.1. Accessing an object through a pointer to an incompatible type
CERT-C CERT-C:EXP36-C Do not cast pointers into more strictly aligned pointer types
JSF++ JSF++:182 Type casting from any type to or from pointers shall not be used.
  JSF++:183 Every possible measure should be taken to avoid type casting.
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Cast: Object Pointers"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

void use_pointers(int *x, int *y, char *z);

void PC_OBJ(short *s){
    int *i = s;                                /* not a cast */
    int *j = (int *) s; /* 'Cast: Object Pointers' warning issued here */
    char *c = (char *) s;                      /* specific exception */
    use_pointers(i,j,c);
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.