C and C++


LANG.STRUCT.CGEN.MPD : Misplaced Default Association in C Generic

Summary

The association list for C generic selection expression includes a default association that is neither the first nor the last association in the list.

Properties

Class Name Misplaced Default Association in C Generic
Significance style
Mnemonic LANG.STRUCT.CGEN.MPD
Categories
MisraC2023 MisraC2023:23.8 A default association shall appear as either the first or the last association of a generic selection
Misra2012 Misra2012:23.8 A default association shall appear as either the first or the last association of a generic selection
Availability Available for C only (not 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="Misplaced Default Association in C Generic"
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

#define MPD_MID(y) (_Generic(y,        \
                             int: 20,  \
                             default: 200,   /* default is neither first nor last */ \
                             char: 2000))

#define MPD_OK_FIRST(y) (_Generic(y, int: 20, char: 2000, default: 200)) /* ok: default is first */
#define MPD_OK_LAST(y) (_Generic(y, default: 200, int: 20, char: 2000))  /* ok: default is last */
#define MPD_OK_NONE(y) (_Generic(y, int: 20,  char: 2000))               /* ok: no default */

int lang_struct_cgen_mpd(void){
    int rv = 10;
    rv += MPD_MID(20); /* 'Misplaced Default Association in C Generic' warning issued here */
    rv += MPD_OK_FIRST(20);                                              /* ok */
    rv += MPD_OK_LAST(20);                                               /* ok */
    rv += MPD_OK_NONE(20);                                               /* ok */
    return rv;
}

Relevant Configuration File Parameters

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