C and C++


LANG.CAST.PC.INC : Conversion: Pointer to Incomplete

Summary

A cast or coercion to or from a pointer to an incomplete type.

Conversions involving pointers to void are not covered by this class, but by Conversion: Void Pointer to Object Pointer and Cast: Arithmetic Type/Void Pointer.

Properties

Class Name Conversion: Pointer to Incomplete
Significance style
Mnemonic LANG.CAST.PC.INC
Categories
MisraC2023 MisraC2023:11.2 Conversions shall not be performed between a pointer to an incomplete type and any other type
Misra2012 Misra2012:11.2 Conversions shall not be performed between a pointer to an incomplete type and any other type
Misra2004 Misra2004:11.2 Conversions shall not be performed between a pointer to object and any type other than an integral type, another pointer to object type or a pointer to void
  Misra2004:11.3 A cast should not be performed between a pointer type and an integral type
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.
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
  TS17961:5.6-argcomp 5.6. Calling functions with incorrect arguments
CERT-CPP CERT-CPP:EXP57-CPP Do not cast or delete pointers to incomplete classes
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="Conversion: Pointer to Incomplete"
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

struct s_inc;                               /* incomplete type */             
struct s_comp {int i;} s_comp;

typedef struct s_inc sinc_t;               
typedef struct s_comp scomp_t;

sinc_t * PC_toINC(scomp_t *sc){
  sinc_t *si;
  si = (sinc_t *) sc;   /* 'Conversion: Pointer to Incomplete' warning issued here */
  return si;
}

scomp_t * PC_fromINC(sinc_t *si){
  scomp_t *sc;
  sc = (scomp_t *) si;  /* 'Conversion: Pointer to Incomplete' warning issued here */
  return sc;
}

Relevant Configuration File Parameters

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