C and C++


LANG.STRUCT.LOOP.MFSTEP : Malformed for-loop Step

Summary

The third ("step") clause of a for loop header has one or more of the following properties.

Properties

Class Name Malformed for-loop Step
Significance style
Mnemonic LANG.STRUCT.LOOP.MFSTEP
Categories
MisraC2023 MisraC2023:14.2 A for loop shall be well-formed
Misra2012 Misra2012:14.2 A for loop shall be well-formed
AUTOSARC++14 AUTOSARC++14:A6-5-4 For-init-statement and expression should not perform actions other than loop-counter initialization and modification.
  AUTOSARC++14:M6-5-4 The loop-counter shall be modified by one of: --, ++, - = n, or + = n; where n remains constant for the duration of the loop.
  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-4 The loop-counter shall be modified by one of -- , ++ , -=n , or +=n; where n remains constant for the duration of the loop.
  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++:199 The increment expression in a for loop will perform no action other than to change a single loop parameter to the next value for 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 Step"
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_mfstep(void){
    int i=1;
    int k;
    int buf[10];


    for (k = 0; k < 10; k +=i){                /* k incremented, no other side effects */
      buf[i] = k; 
    }

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

    for (k = 0; k < 10; k = i++){/* 'Malformed for-loop Step' warning issued here
                                  * - side effect on i */
        /* ... */
    }

    for (k = 0; k < 10; i++){    /* 'Malformed for-loop Step' warning issued here
                                  * - side effect on i */
      /* ... */
    }

}

Relevant Configuration File Parameters

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