C and C++


LANG.CAST.ARRAY.TEMP : Array to Pointer Conversion on Temporary Object

Summary

An array member of a temporary struct or union is cast or coerced to a pointer.

Modifying an array element in this situation will result in undefined behavior.

Properties

Class Name Array to Pointer Conversion on Temporary Object
Significance reliability
Mnemonic LANG.CAST.ARRAY.TEMP
Categories
MisraC2023 MisraC2023:18.9 An object with temporary lifetime shall not undergo array-to-pointer conversion
Misra2012 Misra2012:18.9 An object with temporary lifetime shall not undergo array-to-pointer conversion
AUTOSARC++14 AUTOSARC++14:A18-1-1 C-style arrays shall not be used.
CERT-C CERT-C:ARR00-C Understand how arrays work
  CERT-C:EXP35-C Do not modify objects with temporary lifetime
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default. To enable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += allow class="Array to Pointer Conversion on Temporary Object"

Example

struct S1 {
    int arr[10];
};

struct S1 svar;
struct S1 getS1(void);

void lang_cast_array_temp( struct S1 sparam ){
    int *p;

    p = svar.arr;                     /* ok: svar is not temporary */
    p[0]++;                           /* this operation has defined behavior */

    p = sparam.arr;                     /* ok: sparam is not temporary */

    p = getS1().arr;         /* 'Array to Pointer Conversion on Temporary Object' warning issued here
                              * - getS1() returns a temporary struct, whose arr field is then coerced to int*
                              */
    p[0]++;                  /* this operation has undefined behavior */

    p = (int*)getS1().arr;   /* 'Array to Pointer Conversion on Temporary Object' warning issued here
                              * - as for previous warning, but casting to int* instead of coercing
                              */
}

Relevant Configuration File Parameters

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