Main Content

MISRA C:2023 Rule 11.5

A conversion should not be performed from pointer to void into pointer to object

Since R2024a

Description

Rule Definition

A conversion should not be performed from pointer to void into pointer to object.

Rationale

If a pointer to void is cast into a pointer to an object, the resulting pointer can be incorrectly aligned. The incorrect alignment causes undefined behavior. However, such a cast can sometimes be necessary, for example, when using memory allocation functions.

Polyspace Implementation

Casts or implicit conversions from NULL or (void*)0 do not generate a warning.

Troubleshooting

If you expect a rule violation but do not see it, refer to Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

void foo(void) {

    unsigned int  u32a = 0;
    unsigned int  *p32 = &u32a;
    void          *p;
    unsigned int  *p16;

    p   = p32;                /* Compliant - pointer to uint32_t 
                               *            into pointer to void */
    p16 = p;                  /* Non-compliant */

    p   = (void *) p16;       /* Compliant */  
    p32 = (unsigned int *) p; /* Non-compliant */  
}

In this example, the rule is violated when the pointer p of type void* is cast to pointers to other types.

The rule is not violated when p16 and p32, which are pointers to non-void types, are cast to void*.

Check Information

Group: Pointer Type Conversions
Category: Advisory
AGC Category: Advisory

Version History

Introduced in R2024a