C and C++


LANG.STRUCT.LOOP.MFTERM : Malformed for-loop Condition

Summary

The second ("termination condition") clause of a for loop header includes one or more elements that are modified in the loop body.

Properties

Class Name Malformed for-loop Condition
Significance style
Mnemonic LANG.STRUCT.LOOP.MFTERM
Categories
MisraC2023 MisraC2023:14.2 A for loop shall be well-formed
Misra2012 Misra2012:14.2 A for loop shall be well-formed
Misra2004 Misra2004:13.5 The three expressions of a for statement shall be concerned only with loop control
  Misra2004:13.6 Numeric variables being used within a for loop for iteration counting shall not be modified in the body of the loop
AUTOSARC++14 AUTOSARC++14:M6-5-3 The loop-counter shall not be modified within condition or statement.
  AUTOSARC++14:M6-5-5 A loop-control-variable other than the loop-counter shall not be modified within condition or expression.
MisraC++2008 MisraC++2008:6-5-3 The loop-counter shall not be modified within condition or statement.
  MisraC++2008:6-5-5 A loop-control-variable other than the loop-counter shall not be modified within condition or expression.
MisraC++2023 MisraC++2023:9.5.1 Legacy for statements should be simple
JSF++ JSF++:201 Numeric variables being used within a for loop for iteration counting shall not be modified in the body of the loop.
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="Malformed for-loop Condition"
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_loop_mfterm(void){
    int i;
    int buf[10];

    for (i = 0; i < 10; i++){                    /* i not modified in loop body */
        buf[i] = 10;
    }

    for (i = 0; i < 10; i++){ /* 'Malformed for-loop Condition' warning issued here */
        buf[i++] = 10;
    }
}

Relevant Configuration File Parameters

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