C and C++


LANG.STRUCT.SW.MPC : Misplaced case

Summary

The most-closely enclosing statement for a case or default label is not the body of a switch statement.

This class is a strict subset of Malformed switch Statement.

If a switch statement exhibits multiple issues from the following list, the analysis may report only a subset of them.

Properties

Class Name Misplaced case
Significance style
Mnemonic LANG.STRUCT.SW.MPC
Categories
MisraC2023 MisraC2023:16.2 A switch label shall only be used when the most closely-enclosing compound statement is the body of a switch statement
Misra2012 Misra2012:16.2 A switch label shall only be used when the most closely-enclosing compound statement is the body of a switch statement
Misra2004 Misra2004:15.1 A switch label shall only be used when the most closely-enclosing compound statement is the body of a switch statement
AUTOSARC++14 AUTOSARC++14:M6-4-4 A switch-label shall only be used when the most closely-enclosing compound statement is the body of a switch statement.
MisraC++2008 MisraC++2008:6-4-4 A switch-label shall only be used when the most closely-enclosing compound statement is the body of a switch statement.
MisraC++2023 MisraC++2023:9.4.2 The structure of a switch statement shall be appropriate
CERT-C CERT-C:MSC20-C Do not use a switch statement to transfer control into a complex block
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="Misplaced case"
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_struct_sw_mpc (int i){
    switch (i){
        case 1: {                             /* most-closely enclosing statement is switch body*/
            /* ... */
            case 2: {          /* 'Misplaced case' warning issued here */
                    /* ... */
                    break;
                }
            }
        case 3: {/* ... */ break;}           /* most-closely enclosing statement is switch body */     
        case 4: {                            /* most-closely enclosing statement is switch body */
            /* ... */ 
            default: break;    /* 'Misplaced case' warning issued here */
        }
    }
}

Relevant Configuration File Parameters

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