C and C++


LANG.TYPE.VMAT : Pointer to Variably-modified Array Type

Summary

An object or parameter is declared as a pointer to variably-modified array type.

This class is a strict subset of Declaration of Variable Length Array.

Properties

Class Name Pointer to Variably-modified Array Type
Significance style
Mnemonic LANG.TYPE.VMAT
Categories
MisraC2023 MisraC2023:18.8 Variable-length array types shall not be used
  MisraC2023:18.10 Pointers to variably-modified array types shall not be used
Misra2012 Misra2012:18.8 Variable-length array types shall not be used
  Misra2012:18.10 Pointers to variably-modified array types shall not be used
AUTOSARC++14 AUTOSARC++14:A18-1-1 C-style arrays shall not be used.
CERT-C CERT-C:MSC23-C Beware of vendor-specific library and language differences
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="Pointer to Variably-modified Array Type"
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 lang_type_vmat (unsigned int n,                   /* 'Declaration of Variable Length Array' warning issued here
                                                        * (when enabled)
                                                        * - 3 instances: one for each declaration marked with "VLA" comment.
                                                        */
                     int (* pvla) [n], /* 'Pointer to Variably-modified Array Type' warning issued here
                                        * - pointer to variably-modified array */                   /* VLA */
                     int *vlapi[n],                   /* ok: variably-modified array of pointers */ /* VLA */
                     int vlai[n],                     /* ok: not pointer-to-array type */           /* VLA */
                     int (* pfla) [5]){               /* ok: not a variably-modified array */
  /* ... */
}

Relevant Configuration File Parameters

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